國外的套裝軟件免不了有中文問題
直覺雖然是資料庫,實際卻不是那麼回事
//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;
}
arrow
arrow

    阿淳 發表在 痞客邦 留言(0) 人氣()