PHP获取中英混合字符串长度的方法

 更新时间:2014年06月07日 17:22:57   作者:  
这篇文章主要介绍了PHP获取中英混合字符串长度的方法,需要的朋友可以参考下

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

复制代码 代码如下:

$str = 'Hello world!';
echo strlen($str); // 输出12

然而在PHP自带的函数中,strlen及mb_strlen都是通过计算字符串所占字节数来计算长度的,在不同的编码情况下,中文所占的字节数是不同的。在GBK/GB2312下,中文字符占2个字节,而在UTF-8下,中文字符占3个字节。
复制代码 代码如下:

$str = '你好,世界!';
echo strlen($str); // GBK或GB2312下输出12,UTF-8下输出18

而我们在判断字符串长度时往往需要判断的是字符的数量,而非字符串所占字节数,如在UTF-8下的这段PHP代码:
复制代码 代码如下:

$name = '张耕畅';
$len = strlen($name);
// 输出 FALSE,因为在UTF-8下三个中文占9个字节
if($len >= 3 && $len <= 8){
 echo 'TRUE';
}else{
 echo 'FALSE';
}

那么有什么方便而实用的方法可以获得含中文字符串的长度呢?可以用正则计算出中文字符的个数,在GBK/GB2312编码下除以2,UTF-8编码下则除以3,最后再加上非中文字符串的长度,但这样未免太过麻烦。

WordPress这么一段代码,借鉴如下:

复制代码 代码如下:

$str = 'Hello,世界!';
preg_match_all('/./us', $str, $match);
echo count($match[0]); // 输出9

思想是用正则表达式将字符串分割成单个字符,并直接用count计算出匹配到的字符数,便是我们想要的结果了。

但以上代码在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编码,经小量数据测试通过,但暂未确定是否完全正确,盼有大牛指点一二。

以上本意是为了框架可以兼容多种编码格式,但一般在日常开发中,一个项目是已经可以确定为何种编码的,因此可以使用以下函数来方便地获取字符串长度:

复制代码 代码如下:

int iconv_strlen ( string $str [, string $charset = ini_get("iconv.internal_encoding") ] )

相关文章

  • 学习php设计模式 php实现状态模式

    学习php设计模式 php实现状态模式

    这篇文章主要介绍了php设计模式中的状态模式,使用php实现状态模式,感兴趣的小伙伴们可以参考一下
    2015-12-12
  • PHP扩展类型及安装方式解析

    PHP扩展类型及安装方式解析

    这篇文章主要介绍了PHP扩展类型及安装方式解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • PHP.ini安全配置检测工具pcc简单介绍

    PHP.ini安全配置检测工具pcc简单介绍

    这篇文章主要介绍了PHP.ini安全配置检测工具pcc简单介绍,这款工具非常实用,可以检测PHP配置文件中得配置项是否存在安全隐患,并提出相应的配置建议,需要的朋友可以参考下
    2015-07-07
  • 54个提高PHP程序运行效率的方法

    54个提高PHP程序运行效率的方法

    本文给大家分享的是个人总结的关于提高PHP程序运行效率的方法,有相同需求的小伙伴可以来参考下。
    2015-07-07
  • php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析

    php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析

    这篇文章主要介绍了php 下 html5 XHR2 + FormData + File API 上传文件操作,结合实例形式分析了php 下使用html5 XHR2 + FormData + File API 实现上传文件操作方法与相关操作注意事项,需要的朋友可以参考下
    2020-02-02
  • php实现xml与json之间的相互转换功能实例

    php实现xml与json之间的相互转换功能实例

    这篇文章主要介绍了php实现xml与json之间的相互转换功能,结合实例形式分析了php实现xml转json及json转xml的相关原理与实现技巧,具有一定参考借鉴价值
    2016-07-07
  • PHP随机生成唯一HASH值自定义函数

    PHP随机生成唯一HASH值自定义函数

    这篇文章主要介绍了PHP随机生成唯一HASH值自定义函数,本文先是给出了需求,然后给出了实现代码,需要的朋友可以参考下
    2015-04-04
  • PHP 上传文件的方法(类)

    PHP 上传文件的方法(类)

    一个很简单的,常用PHP上次方法,我是从类里给大家拿出来的,直接可以使用,也可以继续完善一下,大家参考一下
    2009-07-07
  • PHP浮点数的一个常见问题

    PHP浮点数的一个常见问题

    本文主要给大家详细介绍了下php的浮点数,以及在应用中关于浮点数的一个小问题,有需要的小伙伴可以参考下
    2016-03-03
  • WordPress开发中自定义菜单的相关PHP函数使用简介

    WordPress开发中自定义菜单的相关PHP函数使用简介

    这篇文章主要介绍了WordPress开发中自定义菜单的相关PHP函数使用,包括过滤掉自定义菜单中无用的class值的方法,需要的朋友可以参考下
    2016-01-01

最新评论