2011-08-05 4 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に変換します。

問題は、HTMLに変えたくないURLが表示されることがあることです。たとえば:

<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

関連する問題