解決substr函式無法正常切割中文字元的方法

2014-01-16

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

 

$content = "這是 bruse 的測試";
echo substr($content,0,15)."
";

 

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

這是 bruse 皼br>
 

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

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

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

 

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


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

這是 bruse 的測試



這樣是解決了切中文字的問題沒錯,但有時我們要把資料存進資料庫或是呈現出來,這時15個中文字並非是15個位元組,會造成程式的錯誤。

 

此外,截取文章內容如果遇到html的格式被切斷,會造成文檔標籤中斷的問題而導致跑版,所以建議再做截取前一定要先清除html格式在執行,才可以避免問題發生,清除函式如下:

strip_tags($content)

Contact

Github

Codepen

歡迎參觀我的賣場
© 2013 Copyright Digishot Web | Design Tools
Visitors【629646】
digishot webdesign studio