我在《转用PHP截断函数mb_substr()》这篇文章说过,由于主机对 mb_strimwidth() 函数支持不够好(主要是无法解决)——会出现乱码,所以我转用 php 的另外一个支持中文字符串截断函数 mb_substr(),但:
mb_substr() 函数的文字个数中,英文字母也算1个,这样就造成带有中英文字符的字符串截取后的长短差异太大,不美观啊。
于是想起以前收录过的一段支持utf-8字符串截取的代码,但以前收录时忘了哪里收录的,貌似也没有源代码出处,我稍微改下,用法类似 mb_strimwidth()。不同的是文字个数计算,mb_strimwidth() 中的长度是2个算一个中文字符;而现在这个新写的函数是2个英文字母算1个字符来计算的,中文是1对1。
例如:ZWWoOoOo的博客
总数字是:7个
下面是我修改过的函数代码:(代码扔到主题文件 functions.php 里面)
/* utf-8 字符串截取函数 edit by zwwooooo $sourcestr:要截取的字符串,默认空 $i:开始截取地方,默认0 $cutlength:截取长度(文字个数),默认150 $endstr:截取后的字符串末尾字符串,默认是 “....” */ function z_substr($sourcestr='',$i=0,$cutlength=150,$endstr='...') { $str_length=strlen($sourcestr);//字符串的字节数 while (($n<$cutlength) and ($i<=$str_length)) { $temp_str=substr($sourcestr,$i,1); $ascnum=Ord($temp_str);//ascii码 if ($ascnum>=224) { $returnstr=$returnstr.substr($sourcestr,$i,3); $i=$i+3; $n++; }elseif ($ascnum>=192) { $returnstr=$returnstr.substr($sourcestr,$i,2); $i=$i+2; $n++; }else { $returnstr=$returnstr.substr($sourcestr,$i,1); $i=$i+1; $n=$n+0.5; } } if($i<$str_length)$returnstr.=$endstr; return $returnstr; }
调用方法:参数说明看上面代码注释。
<?php echo z_substr($sourcestr, $i, $cutlength, $endstr); ?>
具体应用可以参考《mb_strimwidth函数的简单应用》。
就这样,完。
zww
赏
oooo
or
- 本文标题:utf-8字符串截断函数
- 本文链接:https://zww.me/archives/25356
- 发布时间:2010年12月05日 18:18
- 版权声明:除非注明,文章均为 zwwooooo 原创,转载请以链接形式标明本文地址!
沙发
@A.shun 还以为有沙发呢。= =
@Vicia
好久没见
地板
@冰古
地板好,冬天不冷
@zwwooooo
你冬天坐地板上試試,不冷就有鬼了。
@冰古
其实我打错了,懒得纠正。
站位觀看~
这次我挺靠前的 好久没上网了 一篇篇过目去~~~
@球犯
荒淫荒淫,最新评论都给你刷了
[...] This post was mentioned on Twitter by Max Lee, zwwooooo. zwwooooo said: 『ZWWoOoOo新文章』 utf-8字符串截断函数 http://goo.gl/fb/8Zolk [...]
我努力去看懂一下 ````
@heson
结果呢?还是 ?
好久 没见php code 有点想它了
前排占位
@socekin
杀进前10名!
渐渐的开始看不懂你的文章了。
@郑永
我觉得这篇很简单,以前的文章都能看懂我不信这篇会看不懂
不错,虽然我已经用了类似插件
这不是2分之1个mb_strimwidth()嘛,mb_substr()()已经很好用了。
@飞晏
mb_substr()会造成长短差异太大
我得好好学习一下这些函数了。
居然不是用正则,有点意思
@万戈
正则那个还真没认真测试过。。。
最近大大们的技术文都少了,莫非互联网的冬天到咧?
@有点蓝
不管大大还是小小玩多了就少了
我也得好好学习学习下。
哦哦,我都忘记是咋截断的了
@阿修
厄。。。
嗯嗯!不错!!!!!
我主机根本就不支持mb扩展。。
@QiQiBoY
。。。你不需要吧
@zwwooooo
不能用我也不强求。。。我马马虎虎一个函数能用就行了。。
@QiQiBoY
这个对于你这个js高手来说是个小问题
代码 围观了
WordPress for Android用了没,今天在市场里下载试了下,貌似很不错。可以管理评论、日志、页面。也可发表新日志~~~
@koobai
用了,但很少用