【聲明】本站任何文章都可能有聯盟行銷連結,當你透過文章內的連結購買產品,我可能獲得分潤,這不會增加你任何成本,並且我分享的都是自己實際使用過的資訊,更多細節請點這裡。 Disclosure: Any post on this site may contain affiliate links, meaning I get commission if you decide to make a purchase through my links, at no cost to you.
國外的套裝軟件免不了有中文問題
直覺雖然是資料庫,實際卻不是那麼回事
//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;
}
阿淳的自在生活工具箱 除客座文章分類外,均為阿淳(chaneswin)原創,禁止商業使用,歡迎社群分享,轉載請註明作者與原文連結,禁止商業使用。有任何想法歡迎留言交流!
原文連結:[PHP] 中文亂碼不一定是資料庫問題!那斷字?