这是我现有的代码:
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?
答案 0 :(得分: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非常方便。