首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

解決 ASP.NET URL 傳遞中文參數亂碼完整指南

     編輯:ASP.NET 基礎

問題成因

瀏覽器預設以 UTF-8 編碼 URL,而伺服器端(特別是舊版 IIS 或設定為 GB2312 的環境)可能以不同編碼解碼 QueryString,導致中文參數在傳遞超過兩個漢字時出現亂碼。

三大解決方案

方案一:統一 Web.config 全域化設定

在 <system.web> 區段明確指定請求/回應編碼,確保伺服器端以一致編碼處理 URL。

<system.web>
    <globalization 
        requestEncoding="gb2312" 
        responseEncoding="gb2312" 
        culture="zh-CN" 
        fileEncoding="gb2312" />
</system.web>

※ 若專案採 UTF-8,請將上述編碼全部改為 utf-8,前後端須一致。

方案二:伺服器端显式編碼/解碼

在 Response.Redirect 時使用 Server.UrlEncode,接收端用 Server.UrlDecode 還原。

// 傳遞端
string name = "中文參數";
Response.Redirect("B.aspx?Name=" + Server.UrlEncode(name));

// 接收端
string name = Request.QueryString["Name"];
Response.Write(Server.UrlDecode(name));

此法不依賴全域設定,適用於混合編碼環境。

方案三:前端 JavaScript 配合 escape()

若參數由前端 JavaScript 組合 URL,使用 escape() 編碼(注意:escape 已棄用,現代專案建議改用 encodeURIComponent)。

<script language="javascript">
function escode() {
    var name = "中文參數";
    location.href = "B.aspx?Name=" + escape(name);
}
</script>

伺服器端接收方式同方案二,Request.QueryString["Name"] 會自動解碼。

最佳實務建議

  1. 全站統一 UTF-8:Web.config、資料庫、前端頁面(<meta charset="utf-8">)全部採 UTF-8,從根源消除編碼不匹配。
  2. 習慣性 UrlEncode:所有動態產生的 QueryString 參數,一律在伺服器端或前端編碼後再拼接。
  3. 避免直接拼接中文:即使測試階段正常,上線環境編碼設定不同極易爆雷。

結語

中文 URL 亂碼本質是編碼不一致。透過 Web.config 全域化設定奠定基礎,搭配 Server.UrlEncode/UrlDecode 或前端 encodeURIComponent 显式處理,即可徹底解決問題。

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