3 回答

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