Php 引用tweet时解析Twitter链接中断

Php 引用tweet时解析Twitter链接中断,php,twitter,Php,Twitter,我有下面的代码,可以解析推文来创建链接、提及和散列链接: function parseTwitterText($text) { $returnText = $text; $hashPattern = '/\#([A-Za-z0-9\_]+)/i'; $mentionPattern = '/\@([A-Za-z0-9\_]+)/i'; $urlPattern = '/(http[s]?\:\/\/[^\s]+)/i'; $robotsFollow = fa

我有下面的代码,可以解析推文来创建链接、提及和散列链接:

function parseTwitterText($text) {

    $returnText = $text;
    $hashPattern = '/\#([A-Za-z0-9\_]+)/i';
    $mentionPattern = '/\@([A-Za-z0-9\_]+)/i';
    $urlPattern = '/(http[s]?\:\/\/[^\s]+)/i';
    $robotsFollow = false;

    // SCAN FOR LINKS FIRST!!! Otherwise it will replace the hashes and mentions
    $returnText = preg_replace($urlPattern, '<a href="$1" ' . (($robotsFollow)? '':'rel="nofollow"') . '>$1</a>', $returnText);
    $returnText = preg_replace($hashPattern, '<a href="http://twitter.com/#!/search?q=%23$1" ' . (($robotsFollow)? '':'rel="nofollow"') . '>#$1</a>', $returnText);
    $returnText = preg_replace($mentionPattern, '<a href="http://twitter.com/$1" ' . (($robotsFollow)? '':'rel="nofollow"') . '>@$1</a>', $returnText);
    return $returnText;
}
但是如果我有一条tweet,比如:

“@WOWPicsOfLife:搔痒海龟。http://t.co/rqHVQvhqdO"

结果将是:

“:搔痒乌龟

因此,正如你所看到的,它在最后一个链接中添加了最后一个引用,这显然破坏了它


我这样假设是因为引号在链接的旁边,因为它的末尾没有空格,它会将它与链接连接在一起……问题是我如何修复类似的东西?也许是对正则表达式进行修改以忽略引号?

当然关键在于你的

  $urlPattern = '/(http[s]?\:\/\/[^\s]+)/i';
特别是在[^\s]+中,它表示每个不是空格的字符都是URL的一部分。您需要将其限制为一个安全字符列表,这些字符肯定是URL的一部分。我认为这不能用正则表达式完全实现URL安全,但您可以通过这种方式大大缓解问题

另请参见以下问题:.

这是否正确:$urlPattern='/http[s]?\:\/\/\/[A-Za-z0-9.-~]+/i';