ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

mb_strlen()和strlen()

2020-11-27 10:58:56  阅读:197  来源: 互联网

标签:编码 中文 mb str php strlen


最近写php代码,用到了mb_strlen()和strlen(),区分一下两个函数。
还有就是tp5 内置规则的长度 汉字默认调用内部mb_strlen() 可选。字符编码。如果省略,则使用内部字符编码。mb_internal_encoding() 用于设置/获取内部字符编码。

//测试时文件的编码方式要是utf8
s t r = ′ 中 文 a 字 1 符 ′ ; e c h o s t r l e n ( str='中文a字1符'; echo strlen( str=′中文a字1符′;echostrlen(str).’
‘;//14
echo mb_strlen(KaTeX parse error: Double superscript at position 15: str,'utf8').' '̲;//6 echo mb_st…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( s t r ) + m b s t r l e n ( str) + mb_strlen( str)+mbs​trlen(str,‘utf8’)) / 2;
例如 “中文a字1符” 的strlen( s t r ) 值 是 14 , m b s t r l e n ( str)值是14,mb_strlen( str)值是14,mbs​trlen(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的字符串 s t r 长 度 , 可 以 用 m b s t r l e n ( str长度,可以用 mb_strlen( str长度,可以用mbs​trlen(str,‘utf-8’)。如果省略第二个参数,则会使用php的内部编码。内部编码可以通过 mb_internal_encoding()函数得到。需要注意的是,mb_strlen并不是php核心函数,使用前需要确保在php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函 数的问题。

标签:编码,中文,mb,str,php,strlen
来源: https://blog.csdn.net/qq_33729083/article/details/110223965

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有