10) ? mb_substr($str,0,10, "UTF8") : $str) .' '.((mb_strlen($str, "UTF8")>10) ? nl2br(' ...') : nl2br('')) .. .adslot_m3 { width: 336px; height: 280..."/>

php用mb_strlen, mb_substr來限制字數

字串$str 以UTF8編碼方式
若長度大於10的話, 就取子字串 (即限制字數)
((mb_strlen($str, "UTF8")>10) ? mb_substr($str,0,10, "UTF8") : $str)
.' '.((mb_strlen($str, "UTF8")>10) ? nl2br(' ...') : nl2br(''))

..

PHP中的substr是以位元組來切割字串,如:

$content = “這是 bruse 的測試”;
echo substr($content,0,15).”<br>”;

在UTF-8的編碼下,因為中文字為3位元組,第15位元組是中文字三位元組中央,所以會印出:

這是 bruse 皼br>

其中可以看到”的”的前二位元組會把<br>的”<“拿去組字,造成中文字和程式碼的錯誤。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

有一種方法可以解決這個問題,就是使用mb_substr,並帶編碼,如:

$content = “這是 bruse 的測試”;
echo mb_substr($content,0,15,”UTF-8″);

使用mb_substr可以設定編碼,中文字會被判斷是1個字,因為content只有13字,所以15個中英文會全部印出:

這是 bruse 的測試

One thought on “php用mb_strlen, mb_substr來限制字數

  1. Pingback: 好物分享 [wordpress]文章截斷功能

發表迴響

Copy Protected by Chetan's WP-Copyprotect.