function SubChineseStr($String,$num)
{
$i = 0;
while($i<$num)
{
if(ord(substr($String,$i,1)) >0xa0) $i++;
$i++;
}
$str=substr($String,0,$i);
return $str;
}

解决方案 »

  1.   

    mb_substr就可以了啊
    各位处理中文的时候还是先看看手册上Multibyte String这部分
      

  2.   

    楼上的大哥,我用了mb_substr(),提示我没有这个function,怎么办
      

  3.   

    TO:wasuka(被奴役的食尸鬼)我小试了一下,好像问题依然存在,怎么办啊?
      

  4.   

    windows下的话把extension=php_mbstring.dll这句前面的分号去掉重起apache
    linux下的话加参数重新编译PHP, 具体参数见
    http://www.php.net/manual/zh/ref.mbstring.php
      

  5.   

    TO:mynamesucks(肖申克的救赎) Linux下的配置看不太懂,能帮我写下具体的configure语句吗?
      

  6.   

    --enable-mbstring=shared
    加这句吧
    你们有linux的管理员吗, 还是告诉管理员让他来编译吧
      

  7.   

    <?php
    //下面两个函数让字符截取的时候不出现乱码
    function  findPos($str,$start,$len){
        for($pos=0,$i=$start;$pos<$len;$i++,$pos++)  
        if(ord(substr($str,$i,1))>=128&&ord(substr($str,$i+1,1))>=64)
        $i++;  
        return  $i; 

    function  m_substr($str,$start,$len){  
        $startPos=findPos($str,0,$start);//用到上面的函数  
        $endPos=findPos($str,$startPos,$len);  
        return  substr($str,$startPos,$endPos-$startPos);  
    }
    /*例子:
    * $str  =   "我4cx是e中guoren2";
    * print $r_str    =   m_substr($str,1,2);
    * 输出:4c
    * print substr($str,1,2);
    * 输出:?
    */
     ?>
      

  8.   

    这个现象殊问题处理 填表解决特格/td>
    要如何解决?
      

  9.   

    请各位大哥,作下面的字符串做测试对像:$string="《魔力宝贝》“希望”主题任务--“山茶的哭泣”隆重上线";
    $string="满分!《魔兽世界》“最强玩家”种子选手诞生";我这里用楼上大哥的代码,总是解决不了乱码的问题,急啊!
      

  10.   

    function substr_for_gb2312($str,$start,$len=null)
    {
    $totlelength = strlen($str);

    //特例情况
    if ($len == null) $len = $totlelength;
    if ($len ==0) return "";
    if ($len >= $totlelength && $start == 0 ) return $str;
    if ($start > $totlelength) return ""; //分析$start
    if ($start < 0 )//$start<0时,转化为$start>0时的定位.
    {
    if ( abs($start) >= $totlelength ) $start = 0;
    else $start = $totlelength - abs($start);
     }
    //确定起始位置,当起始位拆分某汉字时,返回值包含此汉字.
    if ($start > 0)
    {
    $i = $start-1; $flag = -1; while ($i >= 0)
    {
    if ( ord(substr($str,$i,1)) > 160)
    {
       $flag = -1*$flag;
    }
    else break;
    $i--;
    }
    if($flag==1)
    {
    $start = $start - 1;
    $len++;  //保证不位移.
    }
    } $str = substr($str,$start);//截除字符串$str的$start位前的字符
    $totlelength = strlen($str); //确定结束位置,当结束位拆分某汉字时,返回值不包含此汉字.
    if ($len<0) $len = $totlelength - abs($len);
    if ($len <= 0) return "";
    $i=min($len,$totlelength);
    $i--;
    $flag = -1;
    while ($i >= 0){
    if (ord(substr($str,$i,1))>160){
    $flag=-1*$flag;
    }else break;
    $i--;
    }
    if($flag == 1)$len=$len-1;
    $subit=substr($str,0,$len);
    return $subit;
    }
      

  11.   

    /*****************************************************
       *
       * 文件名称: CSubstr.inc
       * 作    用: 截取指点长度的中文字符
       * 作    者: PHPX.COM--PHP论坛
       * 
       * 参    数: $str  : 所要截取的字符
       *           $start: 开始字符
       *           $len  : 截取长度,汉字
       *
       *****************************************************/
    function csubstr($str,$start,$len){ 
    $strlen = strlen($str); 
        $clen = 0; 
        for($i = 0; $i < $strlen; $i++,$clen++) { 
    if ($clen >= $start+$len) break; 
    if(ord(substr($str,$i,1)) > 0xa0) { 
    if ($clen >= $start) 
                $tmpstr .= substr($str,$i,2); 
               $i++; 
    }else{ 
    if ($clen >= $start) 
    $tmpstr .= substr($str,$i,1); 
           } 
    }     
    return $tmpstr; 
    }
      

  12.   

    似乎我昨天还被这问题困扰了很久,最后找到了解决办法。
    不知你用的什么IDE环境,总之在IDE里面把编码方式改为utf-8,然后重新启动程序,这样,你的IDE就会总是以utf-8的编码方式来加载你的程序了。
      

  13.   

    使用mbstring吧,呵呵,处理多字节最好的组件~~~
      

  14.   

    是utf-8没错,但是问题依然存在。
    郁闷啊。
      

  15.   

    //含有中文的字符串截取mb_substr($content,$start,$length,'utf-8');//取得中文字串的长度mb_strlen($content,'utf-8');
    函数需要php_mbstring模块支持