代码片段-PHP-UTF8中文字符截断
今天需要用一个UTF-8的字符串截断函数,网上找了几个代码片段发现都有问题,于是查了一下原理自己写了一个函数,代码片段如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 ?>
其实,PHP原生就有多charset下字符截取方案,额,所以就是这个样子...囧..
Multibyte String Functions函数族中,
string mb_substr ( string $str
, int $start
[, int $length
[, string $encoding
]] ) 用来字符串截取
int mb_strlen ( string $str
[, string $encoding
] ) 返回字符串长度
....
详细请查看PHP手册