3 回答

TA貢獻1817條經(jīng)驗 獲得超14個贊
我不得不試圖在過去“修復(fù)”一些UTF8破壞的情況,不幸的是,這從來都不容易,而且往往是不可能的。
除非你能確切地確定它是如何被打破的,并且它總是以完全相同的方式被打破,否則很難“消除”這種傷害。
如果您想嘗試撤消損壞,最好的辦法是開始編寫一些示例代碼,在這些代碼中您嘗試對mb_convert_encoding()調(diào)用進行多種變化,以查看是否可以找到“from”和“to”的組合。修復(fù)您的數(shù)據(jù)。最后,由于所涉及的痛苦程度,通常最好不要擔(dān)心修復(fù)舊數(shù)據(jù),而只是解決未來的問題。
但是,在執(zhí)行此操作之前,您需要確保首先修復(fù)導(dǎo)致此問題的所有內(nèi)容。您已經(jīng)提到您的數(shù)據(jù)庫表格排序和編輯器設(shè)置正確。但是有更多地方需要檢查以確保所有內(nèi)容都是正確的UTF-8:
確保您以UTF-8的形式提供HTML:
header(“Content-Type:text / html; charset = utf-8”);
將PHP默認字符集更改為utf-8:
ini_set(“default_charset”,'utf-8');
如果您的數(shù)據(jù)庫始終沒有在utf-8中進行通話,那么您可能需要在每個連接的基礎(chǔ)上告訴它以確保它處于utf-8模式,在MySQL中您通過發(fā)出以下命令來實現(xiàn):
charset utf8
您可能需要告訴您的網(wǎng)絡(luò)服務(wù)器始終嘗試以UTF8進行通話,在Apache中,此命令是:
AddDefaultCharset UTF-8
最后,您需要始終確保使用正確的UTF-8投訴的PHP函數(shù)。這意味著始終使用mb_ *樣式的“多字節(jié)識別 ”字符串函數(shù)。它還意味著在調(diào)用htmlspecialchars()等函數(shù)時,在末尾包含相應(yīng)的'utf-8'charset參數(shù),以確保它不會錯誤地編碼它們。
如果您錯過了整個過程中的任何一步,編碼可能會被破壞并出現(xiàn)問題。一旦你進入了做utf-8的'凹槽',這一切都成了第二天性。當(dāng)然,PHP6應(yīng)該是來自getgo的完全unicode投訴,這將使這很容易(希望如此)
添加回答
舉報