在写网页的时后常会遇到 80 个字要截字, 然后超过 80 字加 "...", 未满 80 字不加.. 等等之类的问题.
之前用 mb_substr 的写法如下:
复制程式
$string = strip_tags($string); // 先清掉 html tag, 以免 html tag 被破坏
$string = mb_substr($string, 0, 80, 'UTF-8');
$string .= (mb_strlen($string, 'UTF-8') > 80)?'...':''
PHP 有支援很方便的 function 可以直接达到此功能.
复制程式
$string = strip_tags($string);
$string = mb_strimwidth($string, 0, 80, '...', 'UTF-8');
在 UTF-8 的环境算字数用 strlen 或 mb_strlen 都不是很准, 所以可以用另一个做法, 算字的宽度, 也是个不错的做法
复制程式
echo mb_strwidth($string, 'UTF-8'); // 算字宽度
mb_strlen 跟 mb_strwidth 有什么不同呢?
复制程式
echo mb_strwidth("数位男女", 'UTF8').'<br>'
echo mb_strlen("数位男女", 'UTF8').'<br>'
你会看到
8
4
所以如果你是要显示在网页上,那就用 mb_strwidth 会比较准,因为一个中文字的宽度等于两个英文字的宽度
如果你要写入 MySQL ,那就要用 mb_strlen 比较准,因为 MySQL 4.1.x 以后,资料的内码都是用 UTF-8 ,而栏位宽度也是用 UTF-8 去算的