php截取中文字符串的方法

  • 2016-10-30 14:51:26
  • 开发
  • 28
  • shevechco

我们在使用substr截取中文字符串经常输出结果为�;

因为substr函数原型为:string substr ( string $string , int $start [, int $length ] ),其中$length表示返回字节长度,而一个中文占两个字节,对于一个UTF-8的中文字符,会把它当做3个字节来处理

php给出一个函数mb_substr,然而这个函数并不是内置函数,打开php.ini中的extension=php_mbstring.dll这一项

另外一种方法编写函数去判断是否是中文然后进行截取

01.
<?php
02.
//中文字符串截取
03.
function substr_UTF8($string,$sublen,$start=0,$code='UTF-8'){
04.
 if($code=='UTF-8'){
05.
  $pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";
06.
  preg_match_all($pa,$string,$t_string);
07.
  if(count($t_string[0])-$start > $sublen){
08.
   return join('',array_slice($t_string[0],$start,$sublen))."...";
09.
   //array_slice()在数组中根据条件取出一段值,参数(数组,开始位置,[长度])
10.
  }else{
11.
   return join('',array_slice($t_string[0],$start,$sublen));
12.
  }
13.
 }else{
14.
  $start = $start*2;
15.
  $sublen = $sublen*2;
16.
  $strlen = strlen($string);
17.
  $tmpstr = '';
18.
  for($i=0;$i<$strlen;$i++){
19.
   if($i>$start && $i<($start+$sublen)){
20.
    if(ord(substr($string,$i,1))>129){
21.
    //ord():返回字符串第一个字符的ASCII值
22.
    //substr():返回字符串的一部分
23.
     $tmpstr .= substr($string,$i,2);
24.
    }else{
25.
     $tmpstr .= substr($string,$i,1);
26.
    }
27.
   }
28.
   if(ord(substr($string,$i,1))>129){
29.
    $i++;
30.
   }
31.
   if(strlen($tmpstr)<$strlen){
32.
    $tmpstr .= "...";
33.
   }
34.
  }
35.
  return $tmpstr;
36.
 }
37.
}
38.
$string ="顶置车顶起困境檲上盯协押畏奇才趄肯困楞右脚可爱有";
39.
echo substr_zh($string,10,0,'gb2312');
40.
?>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.sulao.cn/post/266

相关推荐