据我测试,PHP截取中文字符串是3个字节截取的

解决方案 »

  1.   

    进入替换了字符,说明正则式找到了匹配的关键字。还有一个问题就是是替换的“装”的第二个字符。说明“啊”和“装”的后半个字符+“、”的前半个字符匹配了。
    我测试了一下,如果设置 $b = "other",就不会有问题。
    我想这是中文处理的问题,建议你还是用 str_replace() 处理这样的问题,或者先确认一下有没有,在做正则替换。
      

  2.   

    可能要先用ORD函数处理判断一下
    给你点参考
        for($i=0;$i<$sublen;$i++)
        {
            if(ord($string{$i})>127) 
            {
                $s.=$string{$i}.$string{++$i};

                continue;
            }else{
                $s.=$string{$i};
                continue;
            } 
        }
      

  3.   

    这篇经典帖子绝对能解决问题。建议大家收藏
    http://search.csdn.net/Expert/topic/2576/2576471.xml?temp=.4132349
      

  4.   

    感谢 zunyir(网上邻居)  
    帖子中 唠叨 高人的方法的确能解决问题, 但是!! 对于大量的内容来处理, 效率太低了。
    中文乱码的确比较疼, 如果 str_ireplace 能在php4中使用就好了:)
      

  5.   

    用 str_replace  一样存在问题:(
      

  6.   

    截取中文字符串的问题#截取中文字符 
    function substrgb($string,$start,$lenght){ for($i=0;$i<$start+$len;$i++){
     $tmpstr=(ord($str[$i])>=161 && ord($str[$i])<=247&&ord($str[$i+1])>=161&&ord($str[$i+1])<=254)?$str[$i].$str[++$i]:$tmpstr=$str[$i];
     if ($i>=$start&&$i<($start+$len))$tmp .=$tmpstr;}
      

  7.   

    php提供了双字节可靠的扩展函数库,为什么不用呢?
      

  8.   

    <?php
    $a = "PHP简介、安装、以及如何....";
    $b = "啊"; 
    $c = mb_ereg_replace("($b)","<font color=red>\\1</font>",$a);
    echo $c;
    ?>
      

  9.   

    ;extension=php_mbstring.dll
    记得去掉PHP。INI里的这一行的分号
      

  10.   

    发现一个新问题,不晓得大家都是怎么解决的。
    把楼主提供的"PHP简介、安装、以及如何...."放到MYSQL数据库中
    select * from tablename where fieldname like binary '%啊%'
    来选取记录,竟然能出来上面的东西来,不晓得"装、"和"啊"有什么编码关系,真晕哦。
    这问题又怎么解决呢?大家继续讨论。
      

  11.   

    to  xuzuning(唠叨):
    如果服务器不是自己的就不好修改php配置来加载模块了。to kingerq(多菜鸟): 
    或许能从这里得到点提示
    <?php
    $a = "安装、";
    $b = "啊";
    echo ord($a); //输出 176
    echo "<hr>";
    echo ord($b); //输出 176
    ?>