php获取utf8字符串的字符长度实例
发布:smiling 来源: PHP粉丝网 添加日期:2014-09-22 21:34:06 浏览: 评论:0
今天没事来研究了一下在php中利用strlen计算字符串长度的一些实例了,但经过测试使用php自带的函数strlen在uft8与gbk编码时有很大的区别,下面我们一起来看看具体测试实例.
今晚在写框架的表单验证类时,需要判断某个字符串长度是否在指定区间内,很自然地,想到了PHP中的strlen函数,代码如下:
- $str = 'Hello world!中';
- echo strlen($str); // 输出12
- 测试一下中文
- $str = '你好,世界!';
- 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 编码下的字符串,代码如下:
- 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(!emptyempty($tmp)){
- $str = $tmp;
- }
- preg_match_all('/./us', $str, $match);
- echo count($match[0]);
可兼容GBK/GB2312及UTF-8编码,经小量数据测试通过,但暂未确定是否完全正确.
Tags: php获取utf8 php获取字符长度
- 上一篇:PHP利用header跳转失效解决方法
- 下一篇:php无限极分类递归排序
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)