Skip to content

[PHP] 中文亂碼不一定是資料庫問題!那斷字?

歡迎在下方留言區討論

國外的套裝軟件免不了有中文問題
直覺雖然是資料庫,實際卻不是那麼回事
//mysql_query(‘SET NAMES utf8’);//設定連結時所用編碼(寫入資料庫)
//mysql_query(“set character set utf8”);//讀資料庫
//mysql_query(‘SET CHARACTER_SET_CLIENT=utf8’);//設定客戶端編碼
mysql_query(‘SET CHARACTER_SET_RESULTS=utf8’);//設定傳回資料時所用編碼
沒錯,想得到的大概就是上面這些了吧
但問題其實在這行 echo htmlentities($txt);
必須改成這樣 echo htmlentities($txt,ENT_COMPAT,’UTF-8′);
(搞死我了Orz)
當資料庫、連線設定都再三確認編碼正確時,中文仍然亂碼, 檢查 htmlentities 函數
將原本 htmlentities(字串);強制指定編碼 >>> htmlentities(字串,ENT_COMPAT,’UTF-8′);
另外中文斷字問題:將substr改用mb_strimwidth,
如下例子:
substr(ucwords(strtolower($prd_name)),0,27).”…”
取代成mb_strimwidth(ucwords(strtolower($prd_name)),0,27, ‘…’, ‘UTF-8’)
注意後面指定的參數如取代字串與編碼UTF8
並非所有主機都預設支援mb_strimwidth() 函數,必須開啟 mb_string 這個模組,
才能使用 mb_strimwidth() 函數,
那主機不是自己的又沒開怎麼辦?
變通的辦法:functions.php 文件中添加如下代碼:
function dm_strimwidth($str ,$start , $width ,$trimmarker ){
$output = preg_replace(‘/^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,’.$start.’}((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,’.$width.’}).*/s’,’\1′,$str);
return $output.$trimmarker;
}

© 2013, Chaneswin. 如發現留有早期非原創作品可以留言回報喔~感謝您的幫忙 🙂


文章如有幫助,先按讚,再分享,歡迎贊助哦!  

歡迎在下方留言區討論