用户名:
密 码: 记住
您当前的位置:首页 > 网络编程 > php教程

php获取utf8字符串的字符长度实例

时间:2015-01-23  来源:西部数据  作者:西部数据

今天没事来研究了一下在php中利用strlen计算字符串长度的一些实例了,但经过测试使用php自带的函数strlen在uft8与gbk编码时有很大的区别,下面我们一起来看看具体测试实例.

今晚在写框架的表单验证类时,需要判断某个字符串长度是否在指定区间内,很自然地,想到了PHP中的strlen函数,代码如下:

  1. $str = 'Hello world!中'
  2. echo strlen($str); // 输出12 
  3. 测试一下中文 
  4. $str = '你好,世界!'
  5. echo strlen($str); // GBK或GB2312下输出12,UTF-8下输出18 www.phpfensi.com 

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

下面这个实例摘自大名鼎鼎的WordPress,非常精确的,另外需要注意的是本函数仅适用于utf-8 编码下的字符串,代码如下:

  1. function utf8_strlen($string=null){ 
  2.     // 将字符串分解为单元 
  3.     preg_match_all("/./us"$string$match); 
  4.     // 返回单元个数    
  5.     return count($match[0]); 

但以上代码在UTF-8编码下并不能处理GBK/GB2312的中文字符串,因为GBK/GB2312的中文字符会被识别为两个字符而计算出来的中文字符数量会翻倍,于是我想到了这么一个办法,代码如下:

  1. $tmp = @iconv('gbk''utf-8'$str); 
  2. if(!emptyempty($tmp)){ 
  3. $str = $tmp
  4. preg_match_all('/./us'$str$match); 
  5. echo count($match[0]); 

可兼容GBK/GB2312及UTF-8编码,经小量数据测试通过,但暂未确定是否完全正确.

来顶一下
返回首页
返回首页
推荐资讯
WiFi太不安全:7岁女孩11分钟内入侵公共网络 WiFi太不安全:7岁女孩11分钟内入侵近期刚刚发布研究说WiFi网络能获得人们手机里多少私人信息,
不服跑个分?人工智能也出现“刷分”乱象 不服跑个分?人工智能也出现“刷分2014年,人工智能领域突然爆发,成为了科研和科技创业的热门
相关文章
    无相关信息
栏目更新
栏目热门