加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP中实现中文字串截取无乱码的处理方法

发布时间:2022-06-30 15:40:38 所属栏目:PHP教程 来源:互联网
导读:在PHP中,substr()函数截取带有中文字符串的话,可能会出现乱码,这是因为中西文一个字节所占有的字节数不一样,而substr的长度参数是按照字节去算的,在GB2312编码时,一个中文占2个字节,英文为1个字节,而在UTF-8编码当中,一个中文可能占有2个或3个字节
  在PHP中,substr()函数截取带有中文字符串的话,可能会出现乱码,这是因为中西文一个字节所占有的字节数不一样,而substr的长度参数是按照字节去算的,在GB2312编码时,一个中文占2个字节,英文为1个字节,而在UTF-8编码当中,一个中文可能占有2个或3个字节,英文或半角标点占1字节。
 
  直接使用PHP函数substr截取中文字符可能会出现乱码,主要是substr可能硬生生的将一个中文字符“锯”成两半。解决办法:
 
  1、使用mbstring扩展库的mb_substr截取就不会出现乱码了。
 
  2、自己书写截取函数,但效率不如用mbstring扩展库来得高。
 
  3、如果仅是为了输出截取的串,可用如下方式实现:substr($str, 0, 30).chr(0)。
 
 
  举个例子:
 
  <?php
  echo mb_substr('这样一来我的字符串就不会有乱码^_^', 0, 7, 'utf-8');
  ?>
  输出:这样一来我的字
  <?php
  echo mb_strcut('这样一来我的字符串就不会有乱码^_^', 0, 7, 'utf-8');
  ?>
  输出:这样一
 
  从上面的例子可以看出,mb_substr是按字来切分字符,而mb_strcut是按字节来切分字符,但是都不会产生半个字符的现象。
 
     if(ord(substr($string,$i,1))>0xa0){
     $str.=substr($string,$i,2);
     $i++;
    }else{
     $str.=substr($string,$i,1);
    }
    }
 ix;
  }
  $re['utf-8'] = "/[x01-x7f]|[xc2-xdf][x80-xbf]|[xe0-xef][x80-xbf]{2}|[xf0-xff][x80-xbf]{3}/";
  $re['gb2312'] = "/[x01-x7f]|[xb0-xf7][xa0-xfe]/";
  $re['gbk']  = "/[x01-x7f]|[x81-xfe][x40-xfe]/";
  $re['big5']  = "/[x01-x7f]|[x81-xfe]([x40-x7e]|xa1-xfe])/";
  preg_match_all($re[$charset], $str, $match);
  $slice = join("",array_slice($match[0], $start, $length));
  return $slice.$suffix;
  }
 

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读