A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 天宝 初级黑马   /  2016-9-16 22:28  /  1861 人查看  /  2 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

在PHP中,strlen与mb_strlen是求字符串长度的函数,但是对于一些初学者来说,如果不看手册,也许不太清楚其中的区别...
先看例子:
<?php  

$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.

PHP内置的字符串长度函数strlen无法正确处理中文字符串,它得 到的只是字符串所占的字节数。对于GB2312的中文编码,strlen得到的值是汉字个数的2倍,而对于UTF-8编码的中文,就是3倍的差异了(在 UTF-8编码下,一个汉字占3个字节)。

对于新人而言,我觉得打好基础才是最关键的,后面针对工作的学习内容还是不要太早去接触,培训初期好好听课,学好每一个知识点!

2 个回复

倒序浏览
谢谢分享
回复 使用道具 举报
跟着大神打天下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马