您当前的位置: 首页 > 网站编程 > PHP教程 > php获取utf8字符串的字符长度实例

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

作者:不详 来源:网络 发布时间: 2014-08-07 18:16 点击:
今晚在写框架的表单验证类时,需要判断某个字符串长度是否在指定区间内,很自然地,想到了PHP中的strlen函数。 代码如下 $str = 'Hello world!中'; echo strlen($str); // 输出12 测试一下中文 代码如下 $str = '你好,世界!'; echo strlen($str); // GBK或GB2312下输

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

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

  

  

  

  

  

  

  

  

  

  

  
代码如下


  $str = 'Hello world!中';

  echo strlen($str); // 输出12

  


  测试一下中文

  

  

  

  

  

  

  

  

  

  

  
代码如下


  $str = '你好,世界!';

  echo strlen($str); // GBK或GB2312下输出12,UTF-8下输出18

  


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

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

  

  

  

  

  

  

  

  

  

  

  
代码如下


  function utf8_strlen($string=null){

     // 将字符串分解为单元

     

  preg_match_all("/./us", $string, $match);

     // 返回单元个数  

     return count($match[0]);

  }



  


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

  

  

  

  

  

  

  

  

  

  

  
代码如下


     $tmp = @iconv('gbk', 'utf-8', $str);

     if(!empty($tmp)){

     $str = $tmp;

     }

     preg_match_all('/./us', $str, $match);

     echo count($match[0]);

  


  可兼容GBK/GB2312及UTF-8编码,经小量数据测试通过,但暂未确定是否完全正确
分享到:
本文"php获取utf8字符串的字符长度实例"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4