入门 - 字符编码与长度

  • 作者:KK

  • 发表日期:2016.9.4


如果我们要获取一个字符串的长度可以用strlen函数:

$str = 'abcde';
echo '您输入的内容一共有' . strlen($str) . '个字符';

但是如果字符里有中文的话那就不准确了:

$str = '中国人';
echo strlen($str);

将代码编码器设置为GBK或者GB2312或者ANSI编码的人会看到输出6

设置为UTF-8编码的人会看到输出9

原因是非ASCII字符的文字通常都要用2到3个字符来表示一个文字,所谓ASCII字符是什么嘛,说通俗点你就认为是“英文、数字、英文标点符号”都行,详细可以到百度百科了解

其实不止是在PHP里,在我接触的任何流行编程语言里都是这样,因为关于字符所占的字节长度不是由某个语言定的,而是一个国际标准,所以都统一的咯


那怎么计算中文的长度?

mb_xxx系列的函数来专门处理中文日文这些就可以了:

$str = '中国人';
echo mb_strlen($str, 'UTF-8'); //第2个参数声明编码,比如GBK什么的根据你的文件编码来定