【问题标题】:Parse html and replace words by anchor tag [duplicate]解析html并用锚标签替换单词[重复]
【发布时间】:2013-06-11 12:49:54
【问题描述】:

我需要用锚标记替换所有关键字。但如果它在标题、元、粗体、强等标签内,请不要替换它。

$keyword = "test";
 $pattern = "/".$keyword."(?!([^<]+)?>)/";
 $replacement  = "<a  style='color:red;'>".$keyword."</a>";         
 $text     = preg_replace( $pattern, $replacement, $text );  
 echo $text;

它正在替换所有单词。例如:标题标签带有“标题测试标题”。如果它带有上述文本,请不要替换它。是否可以创建一个数组模式来检查关键字是否在 html 标记内,如果是则不要替换它。任何人都可以帮助我。如果还有其他选择,请给我。 谢谢, 狄克逊。

【问题讨论】:

    标签: php


    【解决方案1】:

    是的。你可以这样做:

    str_replace(
      array("meta", "title", "head"),
      array("<a style='color:red;'>meta</a>", "<a style='color:red;'>title</a>", "<a style='color:red;'>head</a>"),
      $string
    );
    

    如果关键字很少,这是最简单的方法之一。您不需要 DOM 解析器或正则表达式。

    【讨论】:

    • 和 meta、title 和/或 head wold 永远不会出现在标签上下文之外的任何内容中......
    • 我刚才说,检查 OP 给出了什么。 :) title,meta,bold,strong
    • 它正在替换标题标签。在您的示例中,如果标题是元,则将其替换为锚标记。我想禁止替换丰富的 html 标签,如粗体、强、h1、h2 等以及其他标签,如标题、头部、元等。