截取固定长度的中文字符串

授权方式:署名,非商业用途,保持一致,转载时请务必以超链接(http://www.fwolf.com/blog/post/133)的形式标明文章原始出处和作者信息及本声明。

今天看到Tsung’s Blog上的PHP 截字、斷字專用 function,自己动手试验了一下,发现其实可以扩展为适合两种需要的用法,先看我小小修改过的新源代码(php文件编码必须是utf-8才能正确执行):

<?php
$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 有支援很方便的
PHP 有支…

第一句是方法一,第二句是方法二的结果,由于我限定了长度为11,所以方法一的结果是中文每个字独立的计算为长度1,而方法二中中文字的长度是2,并且自动留出了余量,两种方法可以适合不同的需要,比以前一个字一个字判断的方式效率都要高很多。

No tags for this post.

Related posts

2 Responses to “截取固定长度的中文字符串”

  1. agnes Says:

    從google找到這段code, 可惜還未搞得好, 我的string中有html tags, 已如你的strip_tags, 但結果就如以下:

    $string = ‘PHP 有支援很方便的 function 可以直接達到此功能.’;

    本來應該顯示的結果:
    PHP 有支援很方便的 function 可以 …

    顯示結果變了:
    PHP 有支援很方便的 function 可以 …
    直接達到此功能.

  2. Fwolf Says:

    我没看懂你的结果,不是很正常么?
    是不是说后面多了半行,那应该是测试程序输出的问题吧?

Leave a Reply

您的留言将被缓存和审阅,所以不会立即出现在这里,请别着急,着急的话可以给我发邮件 :-)
支持Markdown Extra语法,参见: [甲] [1] [2]