zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    二级域名共享主站cookies登陆,整合asp
    AS3事件类型 (as3开发技术大全读书笔记)
    如何通过AS3加载外部SWF文件,调用外部文件文档类的方法?
    C#导出Excel总结
    2010年2月编程语言排行榜,ObjectiveC势头强劲
    Flex组件开发总结(aierong原创技术随笔)
    积少成多 Flash(ActionScript 3.0 & Flex 3.0) 系列文章索引
    C#导出Excel的函数(可根据实际需要进行相应修改)
    基于FMS的在线录制例子
    处理外部信息(xml,html,js,shareObject)
  • 原文地址:https://www.cnblogs.com/logon/p/3600149.html
Copyright © 2011-2022 走看看