2010-05-16 52 views
2

我想要一個函數,它將文本作爲輸入並將HTML鏈接的URL作爲輸出返回給文本。是PHP:URL檢測(regexp)包含換行符

我草案如下:

function autoLink($text) { 
    return preg_replace('/https?:\/\/[\S]+/i', '<a href="\0">\0</a>', $text); 
} 

但是,這並不正常工作。

對於那些包含輸入文本...

http://www.google.de/ 

...我得到以下輸出:

<a href="http://www.google.de/<br">http://www.google.de/<br</a> /> 

爲什麼它包括換行符?我怎麼能限制它到真正的網址?

在此先感謝!

回答

4

那麼,<不是空白字符,所以it is matched by [\S]。您可以從接受字符集中排除:

preg_replace('/https?:\/\/[^\s<]+/i', '<a href="\0">\0</a>', $text); 
+0

謝謝,這對於給定的問題很好。但是,如果其他字符如「and>」也被排除在外,那麼我是否必須將它們寫入第一個[]? – caw 2010-05-17 13:39:26

+1

@ marco92w:確切地說,'[^ ...]'中的所有內容都將被排除。 – Heinzi 2010-05-17 15:28:01

1

有關使用Gruber's URL Regex如何?

\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/))) 
+0

感謝,有趣的頁面。但是爲了我的目的,上面的正則表達式就足夠了。正則表達式的優點是什麼? – caw 2010-05-17 13:40:25

+1

@ marco92w:正則表達式不是我的,它來自於「發明」降價的同一個人。不會自動鏈接'ftp [s]://'或'www。*'(無協議)。閱讀並測試它:http://daringfireball.net/2009/11/liberal_regex_for_matching_urls – 2010-05-17 23:19:10

+1

非常感謝,現在我明白所有的優點。 – caw 2010-05-19 16:40:01