首页 后端开发 php教程 细说PHP中strlen和mb_strlen的区别_PHP教程

细说PHP中strlen和mb_strlen的区别_PHP教程

Jul 20, 2016 am 10:56 AM
php strlen 但是 函数 区别 字符串 长度

PHP中,strlenmb_strlen是求字符串长度的函数,但是对于一些初学者来说,如果不看手册,也许不太清楚其中的区别。
下面通过例子,讲解这两者之间的区别。

先看例子:

<ol class="dp-c">
<li class="alt"><span><span><?php  </span></span></span></li>
<li>
<span class="comment">//测试时文件的编码方式要是UTF8 </span><span> </span>
</li>
<li class="alt">
<span class="vars">$str</span><span>=</span><span class="string">'中文a字1符'</span><span>;  </span>
</li>
<li>
<span class="func">echo</span><span> </span><span class="func">strlen</span><span>(</span><span class="vars">$str</span><span>).</span><span class="string">'<br>'</span><span>;</span><span class="comment">//14 </span><span> </span>
</li>
<li class="alt">
<span class="func">echo</span><span> mb_strlen(</span><span class="vars">$str</span><span>,</span><span class="string">'utf8'</span><span>).</span><span class="string">'<br>'</span><span>;</span><span class="comment">//6 </span><span> </span>
</li>
<li>
<span class="func">echo</span><span> mb_strlen(</span><span class="vars">$str</span><span>,</span><span class="string">'gbk'</span><span>).</span><span class="string">'<br>'</span><span>;</span><span class="comment">//8 </span><span> </span>
</li>
<li class="alt">
<span class="func">echo</span><span> mb_strlen(</span><span class="vars">$str</span><span>,</span><span class="string">'gb2312'</span><span>).</span><span class="string">'<br>'</span><span>;</span><span class="comment">//10 </span><span> </span>
</li>
<li><span>?&gt; </span></li>
</ol>
登录后复制

结果分析:在strlen计算时,对待一个UTF8的中文字符是3个长度,所以“中文a字1符”长度是3*4+2=14,在mb_strlen计算时,选定内码为UTF8,则会将一个中文字符当作长度1来计算,所以“中文a字1符”长度是6 .

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

<ol class="dp-c"><li class="alt"><span><span class="func">echo</span><span> (</span><span class="func">strlen</span><span>(</span><span class="vars">$str</span><span>) + mb_strlen(</span><span class="vars">$str</span><span>,</span><span class="string">'UTF8'</span><span>)) / 2; </span></span></li></ol>
登录后复制

例如 “中文a字1符” 的strlen($str)值是14,mb_strlen($str)值是6,则可以计算出“中文a字1符”的占位是10.

<ol class="dp-c"><li class="alt"><span><span class="func">echo</span><span> mb_internal_encoding(); </span></span></li></ol>
登录后复制

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”这一行存在并且没有被注释掉,否则会出现未定义函 数的问题。


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/445811.htmlTechArticle在 PHP 中, strlen 与 mb_strlen 是求字符串长度的函数,但是对于一些初学者来说,如果不看手册,也许不太清楚其中的区别。 下面通过例子,...
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南 适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南 Dec 24, 2024 pm 04:42 PM

适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南

比特币有没有股票?比特币有股权吗? 比特币有没有股票?比特币有股权吗? Mar 03, 2025 pm 06:42 PM

比特币有没有股票?比特币有股权吗?

deepseek r1版本和v3版本有什么区别 deepseek r1版本和v3版本有什么区别 Feb 19, 2025 pm 03:24 PM

deepseek r1版本和v3版本有什么区别

DeepSeek使用常见问题汇总 DeepSeek使用常见问题汇总 Feb 19, 2025 pm 03:45 PM

DeepSeek使用常见问题汇总

如何设置 Visual Studio Code (VS Code) 进行 PHP 开发 如何设置 Visual Studio Code (VS Code) 进行 PHP 开发 Dec 20, 2024 am 11:31 AM

如何设置 Visual Studio Code (VS Code) 进行 PHP 开发

php程序在字符串中计数元音 php程序在字符串中计数元音 Feb 07, 2025 pm 12:12 PM

php程序在字符串中计数元音

您如何在PHP中解析和处理HTML/XML? 您如何在PHP中解析和处理HTML/XML? Feb 07, 2025 am 11:57 AM

您如何在PHP中解析和处理HTML/XML?

盘前盘后交易有什么区别?盘前盘后交易区别详解 盘前盘后交易有什么区别?盘前盘后交易区别详解 Mar 03, 2025 pm 11:54 PM

盘前盘后交易有什么区别?盘前盘后交易区别详解

See all articles