自动链接检测器(PHP + RegEx)

时间:2014-04-25 14:26:51

标签: php regex function hyperlink detect

我创建了一个自动检测链接的功能。它工作得很好,除非HTML标签刚刚在链接之后开始(没有空格)。

示例:

http://www.google.com is cool

变为

<a href="http://www.google.com" target="_blank">www.google.com</a> is cool

http://www.google.com<br />is cool

(实际中http://之后没有空格)变为

<a href="http://www.google.com<br /" target="_blank">www.google.com<br /</a> is cool

我的正则表达式不会在<停止,但不允许< ...

我该如何解决?或者我如何有效地排除<

这是我的功能:

function detect_linkg($str){        
    return preg_replace('#(https?://)([\w\d.&:\#@%/;$~_?\+-=]*)#','<a href="$1$2" target="_blank">$2</a>',$str);
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我认为问题在于:+-=

这实际上会创建一个范围,例如a-z,但在这种情况下从+=,如果您查看ascii图表,则会看到包括< >(但不是-)。

如果您需要文字+\-=

,只需转义{{1}}即可