猪头任 发表于 2012-10-23 22:41:19

代码片段-PHP-UTF8中文字符截断

今天需要用一个UTF-8的字符串截断函数,网上找了几个代码片段发现都有问题,于是查了一下原理自己写了一个函数,代码片段如下:
http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gifhttp://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gifView Code <div id="cnblogs_code_open_57742293-d188-4c5c-862a-220f7896929c" class="cnblogs_code_hide"> 1 <?php 2 /* UTF-8中文字符截断程序 */ 3 4 5 $str = "123这是测试字符串"; 6 $str1 = "()()"; 7 echo subUTF8str($str,0,3)."<br>"; 8 echo subUTF8str($str,0,4)."<br>"; 9 echo subUTF8str($str1,0,4)."<br>";10 echo subUTF8str($str1,0,10)."<br>";11 12 function subUTF8str($str,$start=0,$length=80){ 13    $cur_len = 0; //人理解的字符串长度14    $all_len = strlen($str); //机器理解字符串长度15    if($length > $all_len)16    {17         return $str;18    }19    for($i = 0;$i < $all_len;)20    {21         if($cur_len == $start)22       {23             break;24       }25         if (ord($str[$i]) > 127)26       {27             $i += 3;28         }else{29             $i += 1;30       }31         $cur_len ++;32    }33   $start_pos = $i;34   $temp_pos = $cur_len;35   for(;$cur_len - $temp_pos < $length;)36     {37         if($i >= $all_len)38             break;39         if (ord($str[$i]) > 127)40       {41             $i += 3;42         }else{43             $i += 1;44       }45         $cur_len ++;46     }47   $end_pos = $i;48   return substr($str,$start_pos,$end_pos);49 } 50 ?>
页: [1]
查看完整版本: 代码片段-PHP-UTF8中文字符截断