我正在开发一个用户可以上传文本的网站。出于管理目的,我想
通过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标签中?
谢谢
答案 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
做替换?