php计算中英文混合字符长度

有关中文的问题。PHP内置的字符串长度函数strlen无法正确处理中文字符串,它得到的只是字符串所占的字节数。

<?php
 
$str='真正听得进去别人说话,其实是要';
//计算如下
echo '<meta charset="UTF-8">';
echo $str;
 
$lens = (strlen($str) + mb_strlen($str,'UTF8')) / 2;
 
echo '<hr>';
echo '标准算法长度:'.strlen($str);
 
echo '<hr>';
echo 'UTF8计算中文长度:'.mb_strlen($str,'UTF8');
 
echo '<hr>';
echo '正确的算法计算:'.$lens;
 
?>

浏览器返回信息

真正听得进去别人说话,其实是要
标准算法长度:45
UTF8计算中文长度:15
正确的算法计算:30

谈谈GB2312

对于GB2312的中文编码,strlen得到的值是汉字个数的2倍,而对于UTF-8编码的中文,就是3倍的差异了(在UTF-8编码下,一个汉字占3个字节)。


This entry was posted in PHP and tagged , . Bookmark the permalink.
月小升QQ 2651044202, 技术交流QQ群 178491360
首发地址:月小升博客https://java-er.com/blog/php-len-utf-8-chinese-length/
无特殊说明,文章均为月小升原创,欢迎转载,转载请注明本文地址,谢谢
您的评论是我写作的动力.
2020.03.24 评论已经全局关闭,有事加QQ聊天