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

Spread the love

【聲明】本站任何文章都可能有聯盟行銷連結,當你透過文章內的連結購買產品,我可能獲得分潤,這不會增加你任何成本,並且我分享的都是自己實際使用過的資訊,更多細節請點這裡。 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
Chaneswin

【阿淳】漂流過網路行銷、組織行銷、被創業的光環迷惑過,體驗那些未曾想像的驚奇之後,最終的自由卻是擁有澄澈的雙眼、返璞歸真的看世界,我的冒險不在鎂光燈的絢麗舞台,而在迷宮中。把心路歷程化為故事、把工具筆記在雲端。在瞬息萬變的世界裡,慢慢來。
【阿淳的自由生活工具箱】前身小查的白日夢。從腦中的虛幻到真實世界,這裡記錄著一路上不同階段的想法、課程、工具、實踐、挫折,從此放下權威迷思。如果翻出你需要的工具,歡迎隨喜自取、提問討論 :)

文章: 313

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *