1

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

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

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

假设页面有以下内容:

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

我的代码将其更改为

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

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

谢谢

4

3 回答 3

3

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

于 2013-05-28T03:58:19.230 回答
0

所有出现的“Apple”都会出现在常规句子中(即在空格或换行符之前或之后)吗?如果是这样,你可以尝试这样的事情:

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);
于 2013-05-28T04:29:25.750 回答
0

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

于 2013-05-28T04:34:00.407 回答