PHP中的substr是以位元組來切割字串,如:
在UTF-8的編碼下,因為中文字為3位元組,第15位元組是中文字三位元組中央,所以會印出:
其中可以看到"的"的前二位元組會把
的"<"拿去組字,造成中文字和程式碼的錯誤。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
有一種方法可以解決這個問題,就是使用mb_substr,並帶編碼,如:
使用mb_substr可以設定編碼,中文字會被判斷是1個字,因為content只有13字,所以15個中英文會全部印出:
這樣是解決了切中文字的問題沒錯,但有時我們要把資料存進資料庫或是呈現出來,這時15個中文字並非是15個位元組,會造成程式的錯誤。
此外,截取文章內容如果遇到html的格式被切斷,會造成文檔標籤中斷的問題而導致跑版,所以建議再做截取前一定要先清除html格式在執行,才可以避免問題發生,清除函式如下: