需要将$content中的关键词全部变红。由于前面已经设定了将$content中的URL转换成<a href="..."></a>的链接形式,当URL中含有关键词的时候后面语句就会把链接内部的关键词也改变成<font color=red>的形式,导致链接地址发生改变。请问如何避免该问题?

解决方案 »

  1.   


    这样加的链接就错误了,因为是自动寻找URL的
      

  2.   


    function replace($str,$key,$sstr,$estr){
        $str = str_replace($key,"<font color=red>{$key}</font>",$str);
    return $sstr.$str.$estr;
    }
    $key="eee";
    $content = "http://eee.eee.cv/xml.php<a href='http://eee.eee.cv/xml.php'>http://eee.<b>eee</b>.cv/xml.php</a>http://eee.eee.cv/xml.php";
    $content = preg_replace('/(<[^>]+>)*([^<>]+)(<[^>]+>)*/ies',"replace('\\2','{$key}','\\1','\\3')",$content);
    echo $content;
      

  3.   

    结果为:http://<font color=red>eee</font>.<font color=red>eee</font>.cv/xml.php<a href='http://eee.eee.cv/xml.php'>http://<font color=red>eee</font>.<b><font color=red>eee</font></b>.cv/xml.php</a>http://<font color=red>eee</font>.<font color=red>eee</font>.cv/xml.php
      

  4.   

    <a href="#">123456</a>假设34是变红关键词,<a href="#">12<font color="red">34</font>56</a>这样子不会导致链接变化啊?链接还是正常的,就是中间有了颜色
    如果这种情况你不希望发生替换,可以将变红的关键词跟超链关键词比对,包含在里面的删掉,再去替换变红关键词当然也可以正则把超链提取出来再比对
      

  5.   


    是的,自动识别URL,最好先存入数据库里面的时候就自动识别,否则每次读取都识别一次,很耗时。
    替换用JavaScript啊,别用PHP,替换的时候加样式 <span class="kw"></span>