在PHP中,strlen与mb_strlen是求字符串长度的函数,然则关于一些初学者来讲,假如不看手册,或许不太清晰个中的区分。
下面经由过程例子,解说这二者之间的区分。
先看例子:
<?php //测试时文件的编码体式格局为gbk $str='中文a字1符'; echo strlen($str).'<br>';//10 echo mb_strlen($str,'utf8').'<br>';//7 echo mb_strlen($str,'gbk').'<br>';//6 echo mb_strlen($str,'gb2312').'<br>';//6 echo mb_strlen($str).'<br>';//10 ?>
效果剖析:
在strlen盘算时,看待一个gbk的中文字符是2个长度,所以“中文a字1符”长度是2*4+2=10,在mb_strlen盘算时,选内码为gbk时,会将一个中文当作一个字符长度来处置惩罚。
应用这两个函数则能够团结盘算出一个中英文混排的串的占位是多少(一个中文字符的占位是2,英文字符是1)
echo (strlen($str) + mb_strlen($str,'UTF8')) / 2;
比方 “中文a字1符” 的strlen($str)值是10,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”这一行存在而且没有被解释掉,不然会涌现未定义函 数的题目。
以上就是PHP中strlen和mb_strlen的区分的细致内容,更多请关注ki4网别的相干文章!