zoukankan      html  css  js  c++  java
  • PHP 统计中文字符串的长度

    中文网站一般会选择两种编码:gbk/gb2312或是utf-8。 gbk编码下每个中文字符所占字节为2,例:

    $zhStr = ‘您好,中国!’;
    echo strlen($zhStr); // 输出:12

    UTF-8编码下每个中文字符占3个字节。

    $zhStr = ‘您好,中国!’;
    echo strlen($zhStr); // 输出:18

    那么如何计算这组中文字符串的长度呢?有人可能会说gbk下获取中文字符串长度除以2,utf-8编码下除以3不就行了吗?但是您要考虑字符串并不老实,99%的情况会以中英混合的情况出现。 
    这是WordPress中的一段代码,主要思想就是先用正则将字符串分解为个体单元,然后再计算单元的个数即字符串的长度,代码如下(只能处理utf-8编码下的字符串):

    $zhStr = ‘您好,中国!’;
    $str = ‘Hello,中国!’;
    // 计算中文字符串长度
    function utf8_strlen($string = null) {
    // 将字符串分解为单元
    preg_match_all(“/./us”, $string, $match);
    // 返回单元个数
    return count($match[0]);
    }
    echo utf8_strlen($zhStr); // 输出:6
    echo utf8_strlen($str); // 输出:9

    下面我封装了一个函数准确计算中文字符串的长度:

    function count_strlen($string = null)
    {
        $fileType = mb_detect_encoding($string , array('UTF-8','GBK','LATIN1','BIG5')) ; //判断字符串中文编码的类型
    
        $length = iconv_strlen($string,$fileType);//根据字符编码计算字符串长度
    
        return $length;
    }
    
    $str = "中文45汶";
    $len = count_strlen($str);
    echo $len; //输出5
  • 相关阅读:
    use evolation+mapi with exhange mode
    python open file mode description
    5 reasons why you should learn python programming
    文本从尾到头输出
    安装部署lamp,来测试rediect
    python for ,loop ,else condition test
    python logging usage
    去除重复行
    [WTL]WTL for MFC Programming实践篇 一个自定义ComboBox的移植过程
    subsonic已死,db4o将死
  • 原文地址:https://www.cnblogs.com/zhongJaywang/p/5459953.html
Copyright © 2011-2022 走看看