我有这个代码可以在我的应用程序中点击链接:
$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/#!/username
和http://domain.com/hello@all/
这样的链接并打破了一切,知道如何修复我的代码吗?
string var直接来自twitter API,这是一个例子:$string = 'http://twitter.com/!#/metallica http://someurl.com/get@stuff/';
提前致谢。 编辑:添加字符串值。
答案 0 :(得分:2)
为什么要篡改这些网址?如果它们是直接链接,那么就把它们保持原样!简单的正则表达式模式如下:
((?:f|ht)tp://[^\s]*)
将匹配字符串中的任何网址。
所以,你的代码应该只是:
$string = preg_replace('/((?:f|ht)tp:\/\/[^\s]*)/i', '<a href="$1" rel="nofollow">$1</a>', $string);