当前位置:Gxlcms > PHP教程 > php获取utf8字符串的字符长度实例_PHP教程

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

时间:2021-07-01 10:21:17 帮助过:25人阅读

  今晚在写框架的表单验证类时,需要判断某个字符串长度是否在指定区间内,很自然地,想到了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编码,经小量数据测试通过,但暂未确定是否完全正确

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/727579.htmlTechArticle今晚在写框架的表单验证类时,需要判断某个字符串长度是否在指定区间内,很自然地,想到了PHP中的strlen函数。 代码如下 $str = 'Hello wo...

人气教程排行