课程咨询 :18669403922 QQ:2720475033

济南php培训 > 达内新闻 > PHP中strlen和mb_strlen的区别详解
  • PHP中strlen和mb_strlen的区别详解

    发布:济南php培训      来源:济南php培训      时间:2016-08-26

  • 在PHP中,strlen与mb_strlen两个函数都是用来求字符串长度的,也是我们日常工作中会经常使用到的函数之一,虽然不算难理解,但是对于一些初学者来说,如果不看手册的话,可能还是分不清楚它们的区别。

    好的,不废话了,下面就让我们通过例子来给大家讲解这两者之间的区别吧。

    /* 测试时文件的编码方式注意一定要是UTF8 */

    $str='中文a字1符';

    echo strlen($str).'

    ';//14

    echo mb_strlen($str,'utf8').'

    ';//6

    echo mb_strlen($str,'gbk').'

    ';//8

    echo mb_strlen($str,'gb2312').'

    ';//10

    ?>

    通过结果分析,我们可以看出在通过strlen计算时,编码格式为UTF8的中文字符是3个长度,所以“中文a字1符”长度是3*4+2=14,而在通过mb_strlen计算时,选定内码为UTF8,则会将一个中文字符当作长度1来计算,所以“中文a字1符”长度是6 .

    利用这两个函数则可以联合计算出一个中英文混排的串的占位是多少(一个中文字符的占位是2,英文字符是1)

    echo (strlen($str) + mb_strlen($str,'UTF8')) / 2;

    例如 :

    “中文a字1符” 的strlen($str)值是14,

    mb_strlen($str)值是6,

    则可以计算出“中文a字1符”的占位是10.

    echo mb_internal_encoding();

    PHP内置的字符串长度函数strlen是无法正确处理中文字符串的,它能得 到的仅仅只是字符串所占的字节数。而对于GB2312的中文编码,strlen得到的值是汉字个数的2倍,再看UTF-8编码的中文,就是3倍的差异了(在 UTF-8编码下,一个汉字占3个字节)。

    采用mb_strlen函数可以较好地解决这个问题。mb_strlen的用法和 strlen类似,只不过它有第二个可选参数用于指定字符编码。例如得到UTF-8的字符串$str长度,可以用 mb_strlen($str,'UTF-8')。如果省略第二个参数,则会使用PHP的内部编码。内部编码可以通过 mb_internal_encoding()函数得到。

    注意:mb_strlen并不是PHP的核心函数,使用前必须确保在php.ini中加载了php_mbstring.dll这一项,即确保 “extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函 数的问题。也就不能使用这个函数了。包括mb_开头的一些函数,如mb_substr()函数等等。

    推荐文章

上一篇:php中关JSON的使用方法教程

下一篇:php为字符串前后添加指定数量字符的方法

最新开班日期  |  更多

PHP高级开发工程师就业班

PHP高级开发工程师就业班

开班日期:2月15日

PHP高级开发工程师周末班

PHP高级开发工程师周末班

开班日期:2月15日

PHP高级开发工程师就业班

PHP高级开发工程师就业班

开班日期:2月15日

PHP高级开发工程师周末班

PHP高级开发工程师周末班

开班日期:2月15日

  • 山大路中心地址:济南市历下区山大路47号数码港大厦A座102 电话:0531-55588120
    趵突泉中心地址:济南市历下区趵突泉北路三联商社八楼 电话:0531-55583636
    济宁中心地址:济宁市市中区太白路10号苏宁生活广场19层 电话:0537-5125585
  • 课程培训电话:18669403922 QQ:2720475033     全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56