• PHP 获取中英文混合字符串长度


    通常情况下要想掌握一个字符串变量的长度[一般掌握其字数],自然想到 strlen

    |——

     
    $str = 'string';
    echo strlen($str); //6

    |——

     
    $str = "方言";
    echo strlen($str);//6

    问题来了,明明是两个字的怎么会得到6的结果:在PHP自带的函数中,strlen及mb_strlen都是通过计算字符串所占字节数来计算长度的,在不同的编码情况下,中文所占的字节数是不同的。在GBK/GB2312下,中文字符占2个字节,而在UTF-8下,中文字符占3个字节。

    [我们不需要掌握字节数,没有意义,只要掌握字数就行]

    |——

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

    Wordpress 的代码可以借鉴

    |——

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

    思路是用正则将字符串切割成单个字符,直接获取匹配到的结果,得到结果。

    但以上代码在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]);

    这样可以做到utf-8 和gbk环境下的兼容,但是一般日常我们都是掌握编码环境的[utf-8];

    这样我们获取字符变量的字数就用:

    |——

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

     

     

    参考:

    http://www.clanfei.com/2012/12/1671.html

  • 相关阅读:
    Vue基础简介
    Vue基础简介
    django生命周期请求l流程图
    CSRF与auth模块
    cookie与session django中间件
    Django forms组件与钩子函数
    ajax结合sweetalert实现删除按钮动态效果
    ajax数据交互
    如何绕过CDN找源站ip
    IP地址的另一种形式---一种隐藏IP的方法
  • 原文地址:https://www.cnblogs.com/logon/p/3600149.html
Copyright © 2020-2023  润新知