UTF-8中文字符截取

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

UTF-8中文字符截取
UTF-8中文截取函数
Published by Jesse
在中,用函数截取带有中文字符串的话,可能会出现乱码,这是因为中西文PHPsubstr()
一个字所占有的字节数不一样,而的长度参数是按照字节去算的。

在编substrGB2312码时,一个中文占个字节,英文为个字节,而在编码当中,一个中文可能占有21UTF-8个或个字节,英文或半角标点占字节。

231 为解决这个问题,我找了很多资料,最终找到这么一段文字:
编码的字符可能由个字节组成,具体数目可以由第一个字节判断出来。

理论UTF-81~3 (上可能更长,但这里假设不超过个字节3)
第一个字节大于的,它与它之后的个字节一起组成一个字符2242UTF-8 第一个字节大于小于的,它与它之后的个字节组成一个字符1922241UTF-8 否则第一个字节本身就是一个英文字符(包括数字和一小部分标点符号)。

,知道大概的原理,解决起来就轻松多了,于是写了以下函数用于的字符截取:OKUTF-8
PHP 代码
1.//UTF-8 字符串截取,仅限于
2. cut_str($str,$len) { function
3. (strlen($str) <= $len) $str; ifreturn
4. $n = 0;
5. $tempstr = '';
6. ($i=0; $i<$len; $i++) { for
7. (ord(substr($str,$n,1)) > 224) { if
8. $tempstr .= substr($str,$n,3);
9. $n += 3;
10. $i++; // 把一个中文按两个英文的长度计算 11. }
(ord(substr($str,$n,1)) > 192) { elseif 12. $tempstr .=
substr($str,$n,2); 13. $n += 2; 14. $i++; // 把一个中文按两个英文的长度计算 15. } { else 16. $tempstr .= substr($str,$n,1); 17. $n ++; 18. } 19. } 20. $tempstr.'...'; return 21.}
中也有自带的函数可以用于不同编码的字符串截取,如,但要在
PHPmb_substr()php.ini
中开启相应的扩展。

相关文档
最新文档