一个比较复杂的问题(对我来说).用户提交一段HTML文字,我想把其中的关键词替换成链接,比如"CSDN是个好论坛",替换成"<a href="....">CSDN</a>是个好论坛".但是有两个问题.1,现在关键词比较少,我把它们放在一个List<string>里,然后一个一个查找替换.但是如果有成千上万个关键词,读到内存里就太多了,而且替换起来消耗的时间也比较可怕.能不能直接在数据库里操作?(SQL SERVER2000)2,因为用户提交的是HTML,如果内容是"<a href="...">CSDN论坛</a>是个好论坛",再用简单地查找替换就乱套了.请帮忙看看怎么解决?给个思路也行.

解决方案 »

  1.   

    1、用Ajax实现风格像Google一样,触发关健字,他的关健字是放进数据库中吧,
    2、当用户提交时HtmlEncode进行解码格式,再替换。
      

  2.   

    觉得你这们很消耗性能
    就直接在输入的时候就进行编码。。 输出来的时候在进行转码。。
    server.HtmlEncode(String a) 进行编码server.HtmlDecode(String a) 进行解码。
      

  3.   

    思路就是,已经替换了就不用再替换一次了...
    http://www.l78zw.com/read.php/17.htm
      

  4.   


    function replace_html_keyword($keyword,$a,$str,$b){
    $keyword2 = '<strong style="color:#FF0000; background:#FFCC00">'.$keyword.'</strong>';
    $str = preg_replace("/$keyword/is",$keyword2,$str);
    $result =  $a.$str.$b;
    //&<strong style="color:#FF0000; background:#FFCC00">a</strong>mp; 转义一些HTML实体
    $result =  preg_replace("@&(\w{0,6})?({$keyword2})(\w{0,6})?;@","&$1$keyword$3;",$result);
    return $result;}
      

  5.   

              $keywords = str_replace('/','\/',$_SESSION['keywords']);
                $keywords = trim($keywords);
                $keywords = str_replace('<','&lt;',$keywords);
                $keywords = str_replace('>','&gt;',$keywords);
               
                $news->content  = preg_replace(
                "/(<[^>]+>|^)([^<]+)(<)?/e",
                "replace_html_keyword('$keywords','$1','$2','$3')",$news->content );