$test=ereg_replace("/".$key."/","<font color='red'>".$key."</font>",$str);

解决方案 »

  1.   

    哦,看错了。 。不好意思。。我在EDITPLUS里看的
    也关注一下
      

  2.   

    preg_replace:本函式以 pattern 的规则来剖析比对字串 subject,欲取而代之的字串为参数 replacement。传回值为混合型态资料,为取代后的字串结果。
      

  3.   

    问题出在你的$key只有一个汉字。在此情况下,你可以
    preg_match_all("/[\x80-\xff]?./",$str,$ar); //分割成数组
    if(array_search($key,$ar)) //判断是否存在
      

  4.   

    这个问题不简单原以为中文字不存在会发生问题,但是尝试用存在的一个字"愔"来查找,发现也会出问题,更不爽的是我用五笔竟然打不出这个字。于是我想是否是编码方面的问题,尝试了一下用各种编码方式base64,utf8试了一下,一样不行。不知道百度是如何解决这个问题的。
    看了唠叨的帖子,想了想,也许可行,但实践证明也不行。期待高手!$str = '收昔在洛京,轻薄尤甚,人号云“魏收惊蛱蝶。”文襄曾游东山,令给事黄门侍郎颢等宴。文襄曰:“魏收恃才无宜适,须出其短。”往复数番,收忽大唱曰:“杨遵彦理屈已倒。”愔从容曰:“我绰有馀暇,山立不动,若遇当涂,恐翩翩遂逝。”当涂者魏,翩翩者蛱蝶也。文襄先知之,大笑称善。文襄又曰:“向语犹微,宜更指斥。”愔应声曰:“魏收在并作一篇诗,对众读讫,云:‘打从叔季景出六百斛米,亦不辨此。’远近所知,非敢妄语。”文襄喜曰:“我亦先闻。”众人皆笑。收虽自申雪,不复抗拒,终身病之。';
    $key="愔";
    preg_match_all("/[\x80-\xff]?./",$str,$ar); //分割成数组
    if(array_search($key,$ar)) //判断是否存在
    {
        $test = str_replace($key,"<font color='red'>".$key."</font>",$str);
        echo $test;
    }
    else
    {
        echo "没有找到";
    }
      

  5.   

    找到一篇相关文档
    http://www.tekinginfo.com/coding/forum/cndevforum0209_0309/subject_45302.htm
      

  6.   

    呵呵,手误!
    是$ar[0],不是$ar$key="愔";
    //$key="钟";
    preg_match_all("/[\x80-\xff]?./",$str,$str1);
    preg_match_all("/[\x80-\xff]?./",$key,$key1);
    $ar = array_intersect($str1[0],$key1[0]);
    print_r($ar); // 将得到$key1在$str1中的位置
      

  7.   

    烦请唠叨兄再多点提示:
    一、如果$key="文襄"或其他多余两个汉字的字符串,如何给能够匹配的字符加亮显示。
    二、如果$str中不仅仅是中文,还有英文,如何显示出来?具体例子如下:$str = '收昔在洛京,轻薄尤甚,人号云“魏收惊蛱蝶。”文襄曾游东山,abcdef令给事黄门侍郎颢等宴。文襄曰:“魏收恃才无宜适,须出其短。”往复数番,收忽大唱曰:“杨遵彦理屈已倒。”愔从容曰:“我绰有馀暇,山立不动,若遇当涂,恐翩翩遂逝。”当涂者魏,翩翩者蛱蝶也。文襄先知之,大笑称善。文襄又曰:“向语犹微,宜更指斥。”愔应声曰:“魏收在并作一篇诗,对众读讫,云:‘打从叔季景出六百斛米,亦不辨此。’远近所知,非敢妄语。”文襄喜曰:“我亦先闻。”众人皆笑。收虽自申雪,不复抗拒,终身病之。';$key = "文襄";如果找到了与$key相匹配的字符,如何显示出$key前后各若干个汉字的字符串,中英文都要显示出来。且将$key加亮。所需要的结果如下:...轻薄尤甚,人号云“魏收惊蛱蝶。”文襄曾游东山,abcdef令给事黄门侍郎颢等宴。<font color='red'>文襄</font>曰:“魏收恃才无宜适,须出其短。”往复数番,收忽大唱曰:“杨遵彦理屈已倒。”...
      

  8.   

    结果应该如下:
    ...轻薄尤甚,人号云“魏收惊蛱蝶。”<font color='red'>文襄</font>曾游东山,abcdef令给事黄门侍郎颢等宴。<font color='red'>文襄</font>曰:“魏收恃才无宜适,须出其短。”往复数番,收忽大唱曰:“杨遵彦理屈已倒。”...
      

  9.   

    嗯?我是直接就用的str_replace()
    如果不行,可能是PHP的编码没有选对。
    例子:
    http://www.nhtip.com/special/bus.shtml查询一切正常。
      

  10.   

    如果涉及MySQL的话,MySQL的编码也要选对My.ini:[mysqld]加上
     
    default-character-set=gb2312
      

  11.   

    TO:diekiss(阿峰)
    你可以拷贝我上面的例子试一下吗?
      

  12.   

    $str = '收昔在洛京,轻薄尤甚,人号云“魏收惊蛱蝶。”文襄曾游东山,令给事黄门侍郎颢等宴。文襄曰:“魏收恃才无宜适,须出其短。”往复数番,收忽大唱曰:“杨遵彦理屈已倒。”愔从容曰:“我绰有馀暇,山立不动,若遇当涂,恐翩翩遂逝。”当涂者魏,翩翩者蛱蝶也。文襄先知之,大笑称善。文襄又曰:“向语犹微,宜更指斥。”愔应声曰:“魏收在并作一篇诗,对众读讫,云:‘打从叔季景出六百斛米,亦不辨此。’远近所知,非敢妄语。”文襄喜曰:“我亦先闻。”众人皆笑。收虽自申雪,不复抗拒,终钟身病之。';
    // 注意这里为测试方便将"终身病之。"改成了"终钟身病之。"
    // 请分别用不同的$key进行测试$key="愔";
    $key="钟";
    //$key = "文襄";if(strlen($key) > 2 || preg_match_all("/^[\x01-\x7f]+$/",$key,$p)) {
      // 当$key多于一个汉字或全为基本ascii字符时,可直接替换
      echo str_replace($key,"<font color=red>$key</font>",$str);
    }else {
      preg_match_all("/[\x80-\xff]?./",$str,$str1);
      preg_match_all("/[\x80-\xff]?./",$key,$key1);
      $ar = array_intersect($str1[0],$key1[0]); // 获得交集
      if(count($ar) > 0) {
        $str = $str1[0]; // 为简化书写
        foreach($ar as $k=>$v) {
          $str[$k] = "<font color=red>$str[$k]</font>"; // 替换
        }
        echo join("",$str); // 连接成串并输出
      }
    }
      

  13.   

    <?
    $str = "谓曰:“君有康济才,终不徒然。”便以子孙为托。及贵,追赠长司空,擢其子宁用之。神武自队主转为函使。尝乘驿过建兴,云雾昼晦,雷声随之,半日乃绝,若有牛神应者。每行道路,往来无风尘之色。又尝梦履众星而行,觉而内喜。";
    $key="牛";
    $test=str_replace($key," <font color='red'> ".$key."</font> ",$str);
    echo $test;
    ?>
    把逗号去掉或者改成小写的就正常了 晕!
      

  14.   

    <?
    //补充一点 呵呵
    $str = '收昔在洛京,轻薄尤甚,人号云“魏收惊蛱蝶。”文襄曾游东山,令给事黄门侍郎颢等宴。文襄曰:“魏收恃才无宜适,须出其短。”往复数番,收忽大唱曰:“杨遵彦理屈已倒。”愔从容曰:“我绰有馀暇,山立不动,若遇当涂,恐翩翩遂逝。”当涂者魏,翩翩者蛱蝶也。文襄先知之,大笑称善。文襄又曰:“向语犹微,宜更指斥。”愔应声曰:“魏收在并作一篇诗,对众读讫,云:‘打从叔季景出六百斛米,亦不辨此。’远近所知,非敢妄语。”文襄喜曰:“我亦先闻。”众人皆笑。收虽自申雪,不复抗拒,终钟身病之。';
    // 注意这里为测试方便将"终身病之。"改成了"终钟身病之。"
    // 请分别用不同的$key进行测试$key="你";
    //$key="钟";
    //$key = "文襄";if(strlen($key) > 2 || preg_match_all("/^[\x01-\x7f]+$/",$key,$p)) {
      // 当$key多于一个汉字或全为基本ascii字符时,可直接替换
      echo str_replace($key,"<font color=red>$key</font>",$str);
    }else {
      preg_match_all("/[\x80-\xff]?./",$str,$str1);
      preg_match_all("/[\x80-\xff]?./",$key,$key1);
      $ar = array_intersect($str1[0],$key1[0]); // 获得交集
      if(count($ar) > 0) {
        $str = $str1[0]; // 为简化书写
        foreach($ar as $k=>$v) {
          $str[$k] = "<font color=red>$str[$k]</font>"; // 替换
        }
        echo join("",$str); // 连接成串并输出
      }
      else {
    echo $str;
      }
    }
    ?>
      

  15.   

    $string = '当$key多于一个汉字或全为基本ascii字符';
    我想得到这样一个数组
    arr('当','$','k','e','y','多','于','一','个'汉',字','或','全','为','基','本','a','s','c','i','i','字','符');
    请问如何实现?
      

  16.   

    上面已有
    preg_match_all("/[\x80-\xff]?./",$string,$arr);
      

  17.   

    关注,从今天开始也要成为PHP的人
      

  18.   

    to junyi2003(超级菜鸟) 
    是否死也要当PHP的鬼:)
      

  19.   

    再请教xuzuning(唠叨),你给出的代码是显示加亮后的所有字符串,能否只显示$key前后一定数量的字符串而非显示所有字符串,详细例子如下:具体例子如下:$str = '收昔在洛京,轻薄尤甚,人号云“魏收惊蛱蝶。”文襄曾游东山,abcdef令给事黄门侍郎颢等宴。文襄曰:“魏收恃才无宜适,须出其短。”往复数番,收忽大唱曰:“杨遵彦理屈已倒。”愔从容曰:“我绰有馀暇,山立不动,若遇当涂,恐翩翩遂逝。”当涂者魏,翩翩者蛱蝶也。文襄先知之,大笑称善。文襄又曰:“向语犹微,宜更指斥。”愔应声曰:“魏收在并作一篇诗,对众读讫,云:‘打从叔季景出六百斛米,亦不辨此。’远近所知,非敢妄语。”文襄喜曰:“我亦先闻。”众人皆笑。收虽自申雪,不复抗拒,终身病之。';$key = "文襄";...轻薄尤甚,人号云“魏收惊蛱蝶。”文襄曾游东山,abcdef令给事黄门侍郎颢等宴。<font color='red'>文襄</font>曰:“魏收恃才无宜适,须出其短。”往复数番,收忽大唱曰:“杨遵彦理屈已倒。”...再次感谢!!!
      

  20.   

    呵,试试真循环整个字窜,找到到存在的key.然后做记号.
    这种方法就是效率不高:(
    for($i=0;$i<count($str);$i++)
    {
      for($j=0,$numb=0;$i<count($key);$j++)
      {
        if(Ord($str[i])==Ord($key[j]))//判断每一个aci是否相等
        {
         $numb++;
        }
        if($numb==(count($key)-1))
        {
             //表示找到我需要的$key了,这时可以记录 $i 的值到另一数组变量里保存.
         }
      }
    }
    以上代码未经调试。只是一种想法.