`
flex_莫冲
  • 浏览: 1092012 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

【转】细说PHP中strlen和mb_strlen的区别

    博客分类:
  • php
php 
阅读更多
在php中常见的计算字符串长度的函数有:strlen和mb_strlen.当字符全是英文字符的时候,两者是一样。这里主要比较一下,中英文混排的时候,两个计算结果。
AD:干货来了,不要等!WOT2015 北京站演讲PPT开放下载!
在PHP中,strlen与mb_strlen是求字符串长度的函数,但是对于一些初学者来说,如果不看手册,也许不太清楚其中的区别。
下面通过例子,讲解这两者之间的区别。

先看例子:

<?php 
//测试时文件的编码方式要是UTF8 
$str='中文a字1符'; 
echo strlen($str).'<br>';//14 
echo mb_strlen($str,'utf8').'<br>';//6 
echo mb_strlen($str,'gbk').'<br>';//8 
echo mb_strlen($str,'gb2312').'<br>';//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”这一行存在并且没有被注释掉,否则会出现未定义函 数的问题。

来源
http://developer.51cto.com/art/201105/263103.htm
分享到:
评论

相关推荐

    浅析PHP中strlen和mb_strlen的区别

    本文将详细分析strlen和mb_strlen在不同情况下的表现,以及它们之间的区别。 首先,strlen是一个内置函数,用于计算字符串中的字符数。但需要注意的是,strlen计算的是字符串所占用的字节数。这意味着在处理UTF-8...

    详解PHP中strlen和mb_strlen函数的区别

    比如,可以将strlen()和mb_strlen()的值相加后除以2,从而得到一个中英文混排字符串的占位数。 值得注意的是,mb_strlen() 函数并不属于PHP核心函数。在Windows系统下,使用该函数之前必须确保在php.ini文件中已经...

    字符串长度函数strlen和mb_strlen的区分示例介绍_.docx

    综上所述,虽然`strlen`和`mb_strlen`都是用来计算字符串长度的函数,但它们之间存在着明显的区别。`strlen`简单快速,适用于单字节字符集;而`mb_strlen`更为强大,支持多种字符编码,并能更准确地处理多字节字符。...

    自己写的php中文截取函数mb_strlen和mb_substr

    以上代码段分别展示了自定义的`mb_strlen`和`mb_substr`函数,这些函数可以模拟PHP mbstring扩展库中的相应功能,在没有mbstring扩展库的情况下,仍然能够正确处理UTF-8编码的字符串。 ### 总结 在进行Web开发时,...

    php中strlen和mb_strlen用法实例分析

    在PHP中,有strlen和mb_strlen两个函数可以用来获取字符串的长度,但是它们之间存在一些差异,尤其是在处理多字节字符集,例如中文字符时。在本篇内容中,我们将详细探讨strlen和mb_strlen函数的用法及其在处理中...

    PHP中strlen()和mb_strlen()的区别浅析

    本文将详细解析PHP中的`strlen()`和`mb_strlen()`两个函数的区别。 `strlen()`是PHP内建的字符串长度函数,它返回字符串的字节数。这意味着,如果字符串中包含非ASCII字符,如中文字符,在UTF-8编码下,每个中文...

    字符串长度函数strlen和mb_strlen的区别示例介绍

    在php中常见的计算字符串长度的函数有:strlen和mb_strlen.当字符全是英文字符的时候,两者是一样。这里主要比较一下,中英文混排的时候,两个计算结果。 在PHP中,strlen与mb_strlen是求字符串长度的函数,但是对于...

    php strlen mb_strlen计算中英文混排字符串长度

    在PHP中,处理字符串长度计算时,有两个常用的函数:`strlen`和`mb_strlen`。它们在处理纯英文字符串时表现相同,但在处理包含中文字符的字符串时,两者的计算方式有所不同,尤其在UTF-8编码环境下。 `strlen`函数...

    C语言中strcpy_strcmp_strlen_strcat函数原型

    根据提供的文件信息,本文将详细解释C语言中的四个字符串处理函数:`strcpy`, `strcmp`, `strlen`, 和 `strcat` 的功能与实现原理。这些函数在日常编程中极为常见,掌握它们对于深入理解C语言及其字符串操作至关重要...

    strlen wcslen _tcslen 用法解析

    目的:文章对strlen 和 wcslen 以及_tcslen做了简单的介绍。 语言:C++ 编译器:VisualStudio2010 作者:Lefter 说明: 1、strlen & wcslen & _tcslen.zip中含有源码。 2、strlen & wcslen & _tcslen.pdf中含有...

    php常用字符串长度函数strlen()与mb_strlen()用法实例分析

    主要介绍了php常用字符串长度函数strlen()与mb_strlen()用法,结合实例形式分析了php字符串长度函数strlen()与mb_strlen()功能、用法及相关操作注意事项,需要的朋友可以参考下

    浅析PHP substr,mb_substr以及mb_strcut的区别和用法

    在处理多字节字符时,`mb_strlen()`函数可以用来计算字符串中的字符数,而不是字节数。`mb_strlen()`的语法如下: ```php mb_strlen(string $str, string $encoding = mb_internal_encoding()) ``` 需要注意的是,...

    详解PHP中mb_strpos的使用

    在PHP中,`mb_strpos`函数是一个非常重要的字符串处理函数,主要用于在多字节字符串中查找指定子字符串首次出现的位置。`mb_strpos`是针对非ASCII字符集(如UTF-8)的多字节安全版本,能够正确处理包含特殊字符的...

    sizeof和strlen区别

    在C/C++编程语言中,`sizeof`和`strlen`是两个非常重要的操作符,它们分别用于获取数据类型的大小和字符串的长度。然而,这两个操作符有着本质的区别,理解和掌握它们的区别对于编写高效且无误的代码至关重要。 ...

Global site tag (gtag.js) - Google Analytics