新手关于mb_strlen的问题。
不太明白这三次调用的返回值。。
- PHP code
<!---ecms Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><?phpecho mb_strlen("我的名字") . "<br />"; //12echo mb_strlen("我的名字","UTF-8") . "<br />"; //4echo mb_strlen("我的名字","GBK") //6?>
代码保存在l.php里面,文件编码为utf8
关于mb_strlen 的第二个encoding参数。PHP手册上这么写的:
“The encoding parameter is the character encoding. If it is omitted, the internal character encoding value will be used.”
我想知道那个internal character encoding是指哪个编码,在哪里配置的。
还有,对于这个函数的返回值 是这么写的
“Ret/本文来源gao@!dai!ma.com搞$$代^@码5网@搞代gaodaima码urns the number of characters in string str having character encoding encoding . A multi-byte character is counted as 1. “
多字节的字符按1来计算。
那为干什么第一次调用 会返回12,第二次调用居然返回6了。。 不太明白,希望帮解释 一下,谢谢了!
——解决方案——————–
——解决方案——————–
- PHP code
echo mb_strlen("我的名字") . "
"; //12echo mb_strlen("我的名字","UTF-8") . "
"; //4echo mb_strlen("我的名字","GBK") //6
------解决方案--------------------
首先你的文件编码一定是utf-8,而且你的mb_internal_encoding是类似于ISO-8859-1
然后要知道1个utf8汉字为3字节,gb是2字节,mb_strlen把多字节字算作1,所以会得出
<?php
echo mb_strlen("我的名字") . "
"; //未给定编码,按默认 ISO-8859-1 计算,一个utf8汉字为3
echo mb_strlen("我的名字","UTF-8") . "
"; //给定正确编码,一个汉字为1
echo mb_strlen("我的名字","GBK") //给定错误编码,GBK 一个汉字算2,但你的文件是utf8,所以为4 * 3 = 12字节 / 2 = 6个gbk字
?>