EasyUI `datagrid` 點擊新增/修改彈出 `dialog`,輸入中文提交至後台 (`.ashx`),後台接收到亂碼 (如 `涓婂竷` 或 `???`)。前台 JS 用字串拼接 URL 參數。
var url = "Handler.ashx?type=2&loginId=" + loginid
+ "&LoginPwd=" + LoginPwd
+ "&TeacherName=" + TeacherName; // 中文參數直接拼接
$.ajax({ url: url, ... });
**URL 參數未經編碼直接拼接**。瀏覽器將中文按頁面編碼 (通常 UTF-8) 送出,但伺服器 (IIS/ASP.NET) 預設以 **系統預設編碼 (GB2312/GBK)** 解碼 `Request.QueryString`,導致解碼錯誤產生亂碼。
var url = "Handler.ashx?type=2"
+ "&loginId=" + encodeURIComponent(loginid)
+ "&LoginPwd=" + encodeURIComponent(LoginPwd)
+ "&TeacherName=" + encodeURIComponent(TeacherName)
+ "&Sex=" + encodeURIComponent(Sex)
+ "&Birthday=" + encodeURIComponent(Birthday);
$.ajax({ url: url, ... });
`encodeURIComponent` 將中文轉為 `%E4%B8%AD%E6%96%87` 形式,伺服器自動正確解碼 (ASP.NET 內建支援 UTF-8 解碼 %XX 形式)。
$.ajax({
url: "Handler.ashx",
data: {
type: 2,
loginId: loginid,
LoginPwd: LoginPwd,
TeacherName: TeacherName,
Sex: Sex,
Birthday: Birthday
},
// dataType: "json", // 若後台回傳 JSON
success: function(data) { ... }
});
**jQuery 會自動對 `data` 物件的所有值執行 `encodeURIComponent` 並組裝成 `application/x-www-form-urlencoded` 字串**,完全避免手工拼接錯誤。
在 `Global.asax` 或 `web.config` 強制 `Request` 編碼:
// Global.asax.cs
protected void Application_BeginRequest() {
Request.InputEncoding = System.Text.Encoding.UTF8;
// QueryString 解碼較早,需在 web.config 設定
}
**注意**:`requestEncoding` 僅影響 `Request.Form` (POST Body) 和 `Request.InputStream`,**不影響 `Request.QueryString`**。QueryString 解碼發生在更早管道,**唯一可靠前端編碼**。
**EasyUI Dialog 中文亂碼核心原因:URL 參數手工拼接未編碼。** 立即修復:**改用 `$.ajax({ data: { ... } })` 讓 jQuery 自動編碼**,或手工 `encodeURIComponent`。**切勿手工拼接含中文的 URL 參數**。後台 `web.config` 設定 UTF-8 僅解決 POST Body,QueryString 必須前端編碼。