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

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