不太明白这三次调用的返回值。。
<?php
echo mb_strlen("我的名字") . "<br/>"; //12
echo mb_strlen("我的名字","UTF-8") . "<br/>"; //4
echo 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是指哪个编码,在哪里配置的。还有,对于这个函数的返回值 是这么写的
"Returns the number of characters in string str having character encoding encoding . A multi-byte character is counted as 1. "
多字节的字符按1来计算。
那为干什么第一次调用 会返回12,第二次调用居然返回6了。。 不太明白,希望帮解释 一下,谢谢了!

解决方案 »

  1.   

    哦对,还有一个小问题。 如果PHP里面要用到别的DLL里面的函数 ,是不是等将这个DLL复制到 system32下面,然后再在php.ini里面加上
    extension=php_fdf.dll 这样的代码才可以?
      

  2.   

    strlen、mb_strlen计算中英文混排字符串长度
    2007-08-27  |  22:29分类:技术细节  |  688 views在php中常见的计算字符串长度的函数有:strlen和mb_strlen,下面是对这两个函数的比较说明(编码方式UTF8)    * 比较strlen和mb_strlen
          当字符全是英文字符的时候,两者是一样。这里主要比较一下,中英文混排的时候,两个计算结果。(测试时编码方式是UTF8)
          view sourceprint?
          1.$str='中文a字1符';
          2.echo strlen($str);
          3.echo '';
          4.echo mb_strlen($str,'UTF8');
          5.//输出结果
          6.//14
          7.//6      结果分析:在strlen计算时,对待一个UTF8的中文字符是3个长度,所以“中文a字1符”长度是3*4+2=14
          在mb_strlen计算时,选定内码为UTF8,则会将一个中文字符当作长度1来计算,所以“中文a字1符”长度是6
        * 关于中英文混排串的占位符计算:
          利用这两个函数则可以联合计算出一个中英文混排的串的占位是多少(一个中文字符的占位是2,英文字符是1),计算的方法是:如果一个混排字符串有a个中文,b个英文,占位是:
          view sourceprint?
          1.$str='中文a字1符';
          2.//计算如下
          3.echo ( strlen($str) + mb_strlen($str,'UTF8') ) / 2;
          4.//输出结果
          5.//10
          6.?>      例如  “中文a字1符” 的strlen($str)值是14,mb_strlen($str)值是6,则可以计算出“中文a字1符”的占位是10.
      

  3.   


    echo mb_strlen("我的名字") . "<br/>"; //12
    echo mb_strlen("我的名字","UTF-8") . "<br/>"; //4
    echo mb_strlen("我的名字","GBK") //6UTF8一个汉字三个字符
    GBK一个汉字二个字符当给定编码,就把它当做一个字符串
      

  4.   

    首先你的文件编码一定是utf-8,而且你的mb_internal_encoding是类似于ISO-8859-1
    然后要知道1个utf8汉字为3字节,gb是2字节,mb_strlen把多字节字算作1,所以会得出
    <?php
    echo mb_strlen("我的名字") . "<br/>"; //未给定编码,按默认 ISO-8859-1 计算,一个utf8汉字为3
    echo mb_strlen("我的名字","UTF-8") . "<br/>"; //给定正确编码,一个汉字为1
    echo mb_strlen("我的名字","GBK") //给定错误编码,GBK 一个汉字算2,但你的文件是utf8,所以为4 * 3 = 12字节 / 2 = 6个gbk字
    ?>