截取固定长度的中文字符串
授权方式:署名,非商业用途,保持一致,转载时请务必以超链接(http://www.fwolf.com/blog/post/133)的形式标明文章原始出处和作者信息及本声明。今天看到Tsung’s Blog上的PHP 截字、斷字專用 function,自己动手试验了一下,发现其实可以扩展为适合两种需要的用法,先看我小小修改过的新源代码(php文件编码必须是utf-8才能正确执行):
$string = ‘PHP 有支援很方便的 function 可以直接達到此功能.’;
$len = 11;
//原来的做法
// 先清掉 html tag, 以免 html tag 被破壞
$string = strip_tags($string);
$string = mb_substr($string, 0, $len, ‘UTF-8′);
$string .= (mb_strlen($string, ‘UTF-8′) < $len)?’…’:”;
echo $string . “<br />\r\n”;
$string = ‘PHP 有支援很方便的 function 可以直接達到此功能.’;
//现在更好的做法
$string = strip_tags($string);
$string = mb_strimwidth($string, 0, $len, ‘…’, ‘UTF-8′);
echo $string . “<br />\r\n”;
?>
代码就不多解释了,反正是使用了mb_string扩展中的特有函数替代原来的substr等函数,运行结果如下:
PHP 有支…
第一句是方法一,第二句是方法二的结果,由于我限定了长度为11,所以方法一的结果是中文每个字独立的计算为长度1,而方法二中中文字的长度是2,并且自动留出了余量,两种方法可以适合不同的需要,比以前一个字一个字判断的方式效率都要高很多。
![[Bloglines]](http://www.fwolf.com/blog/wp-content/plugins/bookmarkify/bloglines.png)
![[del.icio.us]](http://www.fwolf.com/blog/wp-content/plugins/bookmarkify/delicious.png)
![[Digg]](http://www.fwolf.com/blog/wp-content/plugins/bookmarkify/digg.png)
![[diigo]](http://www.fwolf.com/blog/wp-content/plugins/bookmarkify/diigo.png)
![[Facebook]](http://www.fwolf.com/blog/wp-content/plugins/bookmarkify/facebook.png)
![[Google]](http://www.fwolf.com/blog/wp-content/plugins/bookmarkify/google.png)
![[MySpace]](http://www.fwolf.com/blog/wp-content/plugins/bookmarkify/myspace.png)
![[Reddit]](http://www.fwolf.com/blog/wp-content/plugins/bookmarkify/reddit.png)
![[Slashdot]](http://www.fwolf.com/blog/wp-content/plugins/bookmarkify/slashdot.png)
![[Email]](http://www.fwolf.com/blog/wp-content/plugins/bookmarkify/email.png)
February 22nd, 2006 at 12:09:35
從google找到這段code, 可惜還未搞得好, 我的string中有html tags, 已如你的strip_tags, 但結果就如以下:
$string = ‘PHP 有支援很方便的 function 可以直接達到此功能.’;
本來應該顯示的結果:
PHP 有支援很方便的 function 可以 …
顯示結果變了:
PHP 有支援很方便的 function 可以 …
直接達到此功能.
February 22nd, 2006 at 13:36:29
我没看懂你的结果,不是很正常么?
是不是说后面多了半行,那应该是测试程序输出的问题吧?