3 回答

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