V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
soeeeeee
V2EX  ›  PHP

程序版本不支持 mb_substr 函数,如何获取带有中文的字符串长度

  •  
  •   soeeeeee · 2014-12-28 22:39:19 +08:00 · 2694 次点击
    这是一个创建于 3610 天前的主题,其中的信息可能已经有所发展或是发生改变。
    网上找到了一个替换的函数,function utf8Substr($str, $from, $len){
    return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
    '((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',
    '$1',$str);
    }
    不知道怎么改成获取长度的函数,先谢谢大家了
    5 条回复    2014-12-29 08:39:49 +08:00
    soeeeeee
        1
    soeeeeee  
    OP
       2014-12-28 22:45:01 +08:00
    好像找到了。。。关贴,,
    lincanbin
        2
    lincanbin  
       2014-12-28 23:16:21 +08:00
    一个简单的实现,用正则把\x00-\xff替换为任意3个字符即可,然后用字符串长度函数处理即可。
    例如把\x00-\xff替换成***,然后substr
    kankana
        3
    kankana  
       2014-12-28 23:21:49 +08:00
    我有次google, 英文的资料找了好久都找不到, 只好试试中文, 发现csdn也有人遇到同样的问题.

    点进去一看, 发现楼主已经把问题解决了, 回贴"问题已经解决".

    看了接下来的几层楼, 发现有人在骂楼主.

    你知道那个楼主为什么被骂吗?
    soeeeeee
        4
    soeeeeee  
    OP
       2014-12-29 08:36:47 +08:00
    @kankana 懂得,不好意思哈。。
    soeeeeee
        5
    soeeeeee  
    OP
       2014-12-29 08:39:49 +08:00   ❤️ 1
    代码:
    function strLength($str,$charset='utf-8'){
    8 if($charset=='utf-8') $str = iconv('utf-8','gb2312',$str);
    9 $num = strlen($str);
    10 $cnNum = 0;
    11 for($i=0;$i<$num;$i++){
    12 if(ord(substr($str,$i+1,1))>127){
    13 $cnNum++;
    14 $i++;
    15 }
    16 }
    17 $enNum = $num-($cnNum*2);
    18 $number = ($enNum/2)+$cnNum;
    19 return ceil($number);
    20 }
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2745 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:54 · PVG 22:54 · LAX 06:54 · JFK 09:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.