首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

EasyUI Dialog 中文亂碼:URL 參數編碼缺失導致

     編輯:程式設計綜合問答

現象

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`,導致解碼錯誤產生亂碼。

解決方案

方案一:前端 `encodeURIComponent` 編碼 (快速修復)


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 形式)。

方案二:jQuery `data` 物件自動編碼 (推薦、最乾淨)


$.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` 字串**,完全避免手工拼接錯誤。

方案三:後台統一設定 UTF-8 解碼 (治本)

在 `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 必須前端編碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved