PHP 截字有個很好用得 Function (mb_strimwidth), 可見: PHP 截字、斷字專用 function.
問題
不過, 最近在使用上, 發現有個問題, 文字用此 Function 截字, 然後在做 HTML 碼的轉換, 結果有時候文字會出現, 有時候整行文字都消失了, 是怎麼回事?
錯誤訊息
- [error] PHP Warning: htmlentities(): Invalid multibyte sequence in argument in test.php
相關的程式碼彙整
<?php
function h($str)
{
reutrn htmlentities($str, ENT_QUOTES, 'UTF-8');
}
echo h(mb_strimwidth($v['desc'], 0, 120, ' ... 更多'));
?>
解法
發現應該是輸出時, 跟 htmlentities 搭配出問題, 於是於 mb_strimwidth() 加上 UTF-8 的設定就可以了, 解決步驟如下:
- 原本
<?php echo h(mb_strimwidth($v['store_desc'], 0, 120, ' ...更多')); ?>
- 加上 UTF-8, ex:
<?php echo h(mb_strimwidth($v['store_desc'], 0, 120, ' ...更多', 'UTF-8')); ?>
- 這樣子就都正常顯示囉~