字體:小 中 大 | |
|
|
2009/12/08 10:02:11瀏覽2317|回應1|推薦1 | |
PHP中的substr是以位元組來切割字串,如: $content = "這是 bruse 的測試"; 在UTF-8的編碼下,因為中文字為3位元組,第15位元組是中文字三位元組中央,所以會印出: 這是 bruse 皼br> 其中可以看到"的"的前二位元組會把<br>的"<"拿去組字,造成中文字和程式碼的錯誤。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 有一種方法可以解決這個問題,就是使用mb_substr,並帶編碼,如: $content = "這是 bruse 的測試"; 使用mb_substr可以設定編碼,中文字會被判斷是1個字,因為content只有13字,所以15個中英文會全部印出: 這是 bruse 的測試
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 所以,我們必須改寫substr,使用位元組的方式計算長度,但又不能出現中文字切割的錯誤,我們改寫substr為utf8_substr,程式如下: function utf8_substr($StrInput,$strStart,$strLen) $content = "這是 bruse 的測試"; 上面的程式碼如果遇到切在中文字中,就會跳出,所以會印出: 這是 bruse 這樣就解決了以上的問題,不過呈現時若使用strlen判斷長度再切,因為中文在UTF-8中是三個位元組,而英文是一個位元組,但中文和英文的字寬度並不到三倍,大約只有一倍,所以會變成長度差太多,此時,我們就得連strlen也改寫。 |
|
( 興趣嗜好|電腦3C ) |