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

今天看到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,并且自动留出了余量,两种方法可以适合不同的需要,比以前一个字一个字判断的方式效率都要高很多。

2 thoughts on “截取固定长度的中文字符串”

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

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

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

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

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

Leave a Reply

Your email address will not be published. Required fields are marked *