我在《转用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 原创,转载请以链接形式标明本文地址!
又出新作了,总是占不到前排呀哈哈。
@zigbee
其实很容易占到
我是来测试链接会不会变成超链接 http://www.zww.me
@阿修
and http://www.zww.me
@阿修 呼……果然都是这样。
@阿修
会的,你那篇文章不是说了吗
现在写代码基本上都用utf-8.
@wmtimes
所以不研究其他编码了。
一直使用 mb_strimwidth() 函数,说不定以后会有用
@迷笛
一般有面板的主机都支持
真简单啊。
@竹下无为梦
对,很简单
用到正在改的zsons上了.突然发现关于截断方法的三个文章我都用上了,每次你更新我也更新
@Weitian Zhao
这……mb_strimwidth()能用最好用这个。
@zwwooooo
晓得,我的意思是每次你用我也用,你升级我也跟着换掉鸟
@Weitian Zhao
这……有点囧
貌似之前遇到过、就是用这招解决的!
PHP达人。
在上海的朋友注意了,免费赠送2010SD软件开发2.0大会门票http://www.378q.com.cn/ccav/245.html
看你有朋友需要不。
腾讯微博转发地址:http://t.qq.com/p/t/11020024134284
帮忙转发下。1000多块的门票,没有人去 就浪费了。
@378Q
这。。。上海太远了
漂亮!我迟一些直接拿去给牛奶蛋用鸟 ~
@小邪
哈哈,小邪对这个很熟悉吧
相对于截断 我现在还是喜欢css控制- -..
这玩意对中文就一杯具货..
@mice
如果是文章你也用css?那么一大坨
我只想到在某些小地方用了 - .-
截断文章还真没试过..嘿嘿..用到再考虑
@mice
哈哈哈,跟我用来当摘录来用还是不多
用过这样的类似的函数来提取描述
@爱新奇
嗯,很多方法
这个也用上了。