Ajax中文亂碼解決方案

主流瀏覽器中 Ajax 對象請求時都以 UTF-8 編碼發送數據,所以當前後端文件都統一用 UTF-8 編碼時情況比較經典而單純。如果確實需要 GB 字符集,則需要適當變通。這裏就這兩種字符集分別說明解決方案。服務器端文件以 PHP 舉例。

下列方案在 IE 系、FireFox3、Chrome4、Opera10 測試通過。

UTF-8 經典方案

前後端文件本身統一都用 UTF-8 編碼。

HTML 文件使用聲明:

 

JavaScript 文件也要存爲 UTF-8 模式,最終確保傳遞參數始終以 UTF-8 編碼的核心是把參數值統一用 encodeURIComponent() 處理。即 SF.HTTP.xhr_utf.js 中的如下這行

注意此時後臺 PHP 程序接收到的請求數據是 UTF-8 編碼的,如果需要轉成其它字符集的數據可以用 iconv 進一步處理。PHP 程序輸出數據也必須是 UTF-8 編碼的,加聲明:

注意要讓 IE 正常接收 UTF8 的數據,必須寫大寫的"UTF-8",而不能用小寫或其它寫法!

 

以下是各文件完整的代碼:

sfxhr_utf.htm

SF.HTTP.xhr_utf.js

ajax_utf.php

GB2312 變通方案

前後端文件本身統一都用ANSI編碼。

HTML 文件使用聲明:

讓 Ajax 對象不以默認的 UTF-8 編碼發送數據,核心的變通是把參數值統一用 escape() 處理,漢字會變成 %u5317%u4EAC 這樣的 Unicode 格式,從而瀏覽器會把它們當作西文數據,不再像普通漢字那樣用 UTF-8 字符集再進行 URI 編碼。即 SF.HTTP.xhr_utf.js 中的如下這行

注意此時後臺 PHP 程序接收到的請求數據是未編碼的 Unicode 格式,需要轉回成 GB2312 字符集的數據,使用PHP 程序中的 unescape() 函數即可。輸出數據也必須是GB2312編碼的,輸出前加上聲明:

SF.HTTP.xhr() 方法使用說明請見方法註釋及 HTML 範例。

不同字符集的範例包中 SF.HTTP.xhr.js 和 SF.HTTP.xhr_utf.js 內容完全相同,只是 SF.HTTP.xhr_utf.js 的文件編碼是 UTF-8。建議使用 UTF-8 版時把前後全部文件都統一成 UTF-8 編碼的文件,因爲 IE 瀏覽器要求引用的外部文件也必須是UTF-8 編碼。

 

以下是各文件完整的代碼:

sfxhr.htm

SF.HTTP.xhr.js

ajax.php

發佈了52 篇原創文章 · 獲贊 7 · 訪問量 32萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章