2011-08-05 23 views
1

這裏是我現有的代碼:的preg_replace - 當用空格包圍只有符合

preg_replace("!((([a-z]{3,5}://))". "[-a-z0-9.]{2,}\.[a-z]{2,4}". "(:[0-9]+)?". "(/([^\s]*[^\s,.])?)?". "(\?([^\s]*[^\s,.])?)?)!i", "<a target=\"_blank\" href=\"\\1\">\\1</a>", $s); 

它需要一個鏈接,並把它變成HTML。

問題是,有時我得到一個URL,我不想變成HTML。例如:

<img src="http://www.domain.com/img.png" /> 

,這樣會變成:

<img src="<a target="_blank" href ... 

什麼是防止這種情況的最好方法是什麼?我認爲只有在一個空間之間建立聯繫可能會奏效。我將如何改變preg_replace?

回答

2

您可以使用word boundaries\b)。

preg_replace("!\b((([a-z]{3,5}://))". "[-a-z0-9.]{2,}\.[a-z]{2,4}". "(:[0-9]+)?". "(/([^\s]*[^\s,.])?)?". "(\?([^\s]*[^\s,.])?)?)\b!i", "<a target=\"_blank\" href=\"\\1\">\\1</a>", $s); 

雖然我的首選技術是隻在文本節點中搜索,所以你不必處理序列化的HTML。

如果您決定解析HTML,則DOMDocument非常方便。

+0

謝謝!這使我走上了正軌。 – Chris