2013年(30)
分类: PHP
2013-08-17 10:06:03
在PHP中,strlen与mb_strlen是求字符串长度的函数,可是对于一些初学者来讲,若是不看手册,概略不太清晰个中的鉴识。
下面颠末例子,教授教养这二者之间的判别。
先看例子:
';//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”这一行具备何况没有被标明掉,不然会出现不决义函 数的题目。本文转自