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

2014-12-28 22:39:19 +08:00
 soeeeeee
网上找到了一个替换的函数,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);
}
不知道怎么改成获取长度的函数,先谢谢大家了
2587 次点击
所在节点    PHP
5 条回复
soeeeeee
2014-12-28 22:45:01 +08:00
好像找到了。。。关贴,,
lincanbin
2014-12-28 23:16:21 +08:00
一个简单的实现,用正则把\x00-\xff替换为任意3个字符即可,然后用字符串长度函数处理即可。
例如把\x00-\xff替换成***,然后substr
kankana
2014-12-28 23:21:49 +08:00
我有次google, 英文的资料找了好久都找不到, 只好试试中文, 发现csdn也有人遇到同样的问题.

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

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

你知道那个楼主为什么被骂吗?
soeeeeee
2014-12-29 08:36:47 +08:00
@kankana 懂得,不好意思哈。。
soeeeeee
2014-12-29 08:39:49 +08:00
代码:
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 }

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/157423

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX