2013-05-28 61 views
1

我正在开发一个用户可以上传文本的网站。为了管理目的,我想 通过php动态地将所有文本“apple”更改为<a href="https://apple.com">apple<a>。我使用str_replace('apple','<a href="..">apple</a>')如何防止PHP str_replace替换html标签中的文字?

现在

然而,这个词“苹果”可能已被链接到用户的外部源。在这种情况下,会弄乱原始链接。

说出页面有以下几点:

<a href="...">apple</a> 

我的代码,将其更改为

<a href="..."><a href="...">apple</a></a> 

有没有什么办法可以识别是否一定的“苹果”是一个标签或其他的html标签已经?

谢谢

+0

只是苹果?或其他的话? – 2013-05-28 03:58:06

+0

现在我只需要一个关键字“apple”。 – user2426918

+0

你可以看看这个词的潜在边界 – 2013-05-28 04:02:31

回答

3

使用DOMDocument打开HTML到DOM可以一起工作。然后,遍历所有文本节点,进行替换。

+0

他们正在上传他们的链接吗?另外,你的例子中的str_replace没有正确设置 - 例如它应该是$ str = str_replace($ search,$ replace,$ str) - 这只是一个错字吗? – JasonMichael

+0

@JasonMichael是的,他们正在上传链接。这是一个错字。 – user2426918

+1

不是最简单的,但正确的方式 –

0

所有的“苹果”都会出现在正则句子中(即在空格还是换行符之前或之后)?如果是的话,你可以尝试这样的事:

str_replace(' apple', ' <a href="..">apple</a>, $string); 

如果不会做你需要什么,做一个包罗万象的str_replace函数,然后使用的preg_match正则表达式用得到清理任何嵌套链接。有些东西会保留原始链接(尽管我不推荐使用正则表达式来解析HTML)。

preg_match('/\<a href="(.*)"\>\<a href="(.*)"\>(.*)\</a\>\</a\>', '<a href="\\1">\\3</a>', $string); 
0

为什么不使用if语句来查找<a href="..">else做你的更换?