大約2年前,我犯了一個使用iso-8859-1啓動大型網站的錯誤。我現在遇到了一些字符問題,尤其是使用ajax將數據發送到服務器時。正因爲如此,我想切換到使用UTF-8。更改網站從iso-8859-1到UTF-8的字符編碼
你看到了什麼問題?我知道我將不得不搜索該網站以查找需要更改的字符?他們的真實人物。但是,這樣做有沒有其他風險?有沒有人做過這個?
大約2年前,我犯了一個使用iso-8859-1啓動大型網站的錯誤。我現在遇到了一些字符問題,尤其是使用ajax將數據發送到服務器時。正因爲如此,我想切換到使用UTF-8。更改網站從iso-8859-1到UTF-8的字符編碼
你看到了什麼問題?我知道我將不得不搜索該網站以查找需要更改的字符?他們的真實人物。但是,這樣做有沒有其他風險?有沒有人做過這個?
的主要困難是確保你已經檢查所有數據路徑是UTF-8清潔:
您的網站是否DB-支持?如果是這樣,您需要將所有表格轉換爲UTF-8或其他Unicode編碼,以便排序和文本搜索正常工作。
您的網站是否使用一些編程語言進行動態內容? (PHP,mod_perl,ASP ...?)如果是這樣,您必須確保您使用的特定語言解釋程序完全理解某種形式的Unicode,如果它本身不使用UTF-8 — UTF-16是最常見的—,並檢查它是否配置爲在其輸出上使用UTF-8到Web服務器。
您的網站是否有某種後端應用程序服務器?它的文本輸出是否使用UTF-8?
至少有三個不同的地方可以聲明Web文檔的字符集。確保您更改它們都:
Content-Type
頭<meta http-equiv="Content-Type">
標籤在你的文檔<head>
<?xml>
標籤在文檔的頂部,如果用嚴格的XHTML這一切都來自於幾年前我的經驗,當我通過一個比較複雜的N層應用程序追蹤一些Unicode數據,發現便利着想rsion連鎖店如:
Latin-1 → UTF-8 → Latin-1 → UTF-8
所以,即使數據在瀏覽器中結束了自稱是「UTF-8」,該應用可能會仍然只處理與Latin-1的共同的子集。
這些奇怪的轉換鏈最大的原因是由於當時工具中不成熟的Unicode支持,但如果你不小心使管道UTF-8清潔,你仍然可以發現自己像這樣搞砸了。 。
至於你提到遍尋Latin-1字符,並逐一轉換文件的意見,我不會那樣做。我會在每個現代Linux系統上找到的iconv
實用程序構建一個腳本,爲系統中的每個文本文件提供信息,並將其從Latin-1明確轉換爲UTF-8。不遺餘力。
這樣的改變觸及(幾乎)系統的每個部分。你需要經歷一切,從數據庫到PHP到HTML到網頁瀏覽器。
啓動一個測試網站並對其進行一些嚴肅的測試(在各種平臺上執行各種事情的各種瀏覽器)。
IMO真正熟悉UTF-8以及它對於軟件意味着什麼非常重要。幾個快速點:
strstr()
仍然可以正常工作。
我們正在使用用PHP編寫的CMS來處理編碼。它運行在PostgreSQL上。在CMS中,我可以切換編碼,然後更改所有頁面中的內容類型標頭... – 2009-10-20 23:02:28
我敢打賭,只是更改了CMS宣佈它用於mod_php的charset,它控制着Apache向瀏覽器。當然,我不希望它奇蹟般地遷移數據庫中的所有數據。它可能不會轉換CMS用於構建頁面的現有模板。底線:測試,測試,測試。將一些來自Latin-1集以外的字符放入數據庫中,並查看它們是否能在瀏覽器中生存。如果是這樣,然後檢查以確保您沒有任何多餘的轉換,如上所示。如果不是的話,東西仍然會將UTF-8粉碎成Latin-1。 – 2009-10-20 23:47:45
想到另一個風險領域。將它添加到上面的編號列表中。 – 2009-10-20 23:56:03