preg_replace和twitter

时间:2011-04-17 04:37:17

标签: php regex preg-replace

我有这个代码可以在我的应用程序中点击链接:

$string = preg_replace('!(((f|ht)tp://)[-a-zA-Zа-яА-Я()0-9@:%_+.~#?&;//=]+)!i', '<a href="$1" rel="nofollow">$1</a>', $string);
$string = preg_replace('/@(\w+)/', '<a href="http://twitter.com/$1" rel="nofollow">$0</a>', $string);
$string = preg_replace('/#(\w+)/', '<a href="http://search.twitter.com/search?q=%23$1" rel="nofollow">$0</a>', $string);

上面的代码工作正常,但我突然看到一些像http://twitter.com/#!/usernamehttp://domain.com/hello@all/这样的链接并打破了一切,知道如何修复我的代码吗?

string var直接来自twitter API,这是一个例子:$string = 'http://twitter.com/!#/metallica http://someurl.com/get@stuff/';

提前致谢。 编辑:添加字符串值。

1 个答案:

答案 0 :(得分:2)

为什么要篡改这些网址?如果它们是直接链接,那么就把它们保持原样!简单的正则表达式模式如下:

((?:f|ht)tp://[^\s]*)

将匹配字符串中的任何网址。

所以,你的代码应该只是:

$string = preg_replace('/((?:f|ht)tp:\/\/[^\s]*)/i', '<a href="$1" rel="nofollow">$1</a>', $string);