PHP UTF8中文字符截断函数代码

  php中英文混合字符截断不乱码函数(utf8)

  

复制代码 代码如下:

  //utf8格式下的中文字符截断

  //$sourcestr 是要处理的字符串

  //$cutlength 为截取的长度(即字数)

  //$addstr 超过长度时在尾处加上的字符

  function cut_str($sourcestr, $cutlength, $addstr='...'){

  $returnstr='';

  $i=0;

  $n=0;

  $str_length=strlen($sourcestr);//字符串的字节数

  while (($n<$cutlength) and ($i<=$str_length)){

  $temp_str=substr($sourcestr,$i,1);

  $ascnum=Ord($temp_str);//得到字符串中第$i位字符的ascii码

  if ($ascnum>=224){ //如果ASCII位高与224,

  $returnstr=$returnstr.substr($sourcestr,$i,3); //根据UTF-8编码规范,将3个连续的字符计为单个字符

  $i=$i+3; //实际Byte计为3

  $n++; //字串长度计1

  }elseif ($ascnum>=192){ //如果ASCII位高与192,

  $returnstr=$returnstr.substr($sourcestr,$i,2); //根据UTF-8编码规范,将2个连续的字符计为单个字符

  $i=$i+2; //实际Byte计为2

  $n++; //字串长度计1

  }elseif ($ascnum>=65 && $ascnum<=90){ //如果是大写字母,

  $returnstr=$returnstr.substr($sourcestr,$i,1);

  $i=$i+1; //实际的Byte数仍计1个

  $n++; //但考虑整体美观,大写字母计成一个高位字符

  }else{ //其他情况下,包括小写字母和半角标点符号,

  $returnstr=$returnstr.substr($sourcestr,$i,1);

  $i=$i+1; //实际的Byte数计1个

  $n=$n+0.5; //小写字母和半角标点等与半个高位字符宽...

  }

  }

  if ($str_length>$cutlength){

  $returnstr = $returnstr . $addstr;//超过长度时在尾处加上的字符

  }

  return $returnstr;

  }

  

复制代码 代码如下:

  <?php

  /* UTF-8中文字符截断程序 */

  $str = "123这是测试字符串";

  $str1 = "()()";

  echo subUTF8str($str,0,3)."<br>";

  echo subUTF8str($str,0,4)."<br>";

  echo subUTF8str($str1,0,4)."<br>";

  echo subUTF8str($str1,0,10)."<br>";

  function subUTF8str($str,$start=0,$length=80){

  $cur_len = 0; //人理解的字符串长度

  $all_len = strlen($str); //机器理解字符串长度

  if($length > $all_len)

  {

  return $str;

  }

  for($i = 0;$i < $all_len;)

  {

  if($cur_len == $start)

  {

  break;

  }

  if (ord($str[$i]) > 127)

  {

  $i += 3;

  }else{

  $i += 1;

  }

  $cur_len ++;

  }

  $start_pos = $i;

  $temp_pos = $cur_len;

  for(;$cur_len - $temp_pos < $length;)

  {

  if($i >= $all_len)

  break;

  if (ord($str[$i]) > 127)

  {

  $i += 3;

  }else{

  $i += 1;

  }

  $cur_len ++;

  }

  $end_pos = $i;

  return substr($str,$start_pos,$end_pos);

  }

  ?>

  其实,PHP原生就有多charset下字符截取方案,额,所以就是这个样子...囧..

  Multibyte String Functions函数族中,

  string mb_substr ( string $str , int $start [, int $length [, string $encoding ]] ) 用来字符串截取

  int mb_strlen ( string $str [, string $encoding ] ) 返回字符串长度

  ....

  详细请查看PHP手册