如何防止PHP str_replace替换html标签中的文本?

时间:2013-05-28 03:50:13

标签: php

我正在开发一个用户可以上传文本的网站。出于管理目的,我想 通过php动态地将所有文本“apple”更改为<a href="https://apple.com">apple<a>

我正在使用str_replace('apple','<a href="..">apple</a>')现在

但是,“apple”一词可能已被用户链接到外部来源。在这种情况下,会搞乱原始链接。

假设该页面包含以下内容:

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

我的代码会将其更改为

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

有什么方法可以确定某个“苹果”是否已经包含在标签或其他html标签中?

谢谢

3 个答案:

答案 0 :(得分:3)

使用DOMDocument将HTML转换为可以使用的DOM。然后,迭代所有文本节点,进行替换。

答案 1 :(得分:0)

所有出现的&#34; Apple&#34;是常规句子(即空格或换行符之前或之后)?如果是这样,你可以尝试这样的事情:

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

如果那不能满足您的需求,请执行一个全能的str_replace,然后使用preg_match和regex来清理任何嵌套链接。这样做的东西将保留原始链接(虽然我不建议使用正则表达式来解析HTML)。

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

答案 2 :(得分:0)

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