瀏覽器預設以 UTF-8 編碼 URL,而伺服器端(特別是舊版 IIS 或設定為 GB2312 的環境)可能以不同編碼解碼 QueryString,導致中文參數在傳遞超過兩個漢字時出現亂碼。
在 <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 組合 URL,使用 escape() 編碼(注意:escape 已棄用,現代專案建議改用 encodeURIComponent)。
<script language="javascript">
function escode() {
var name = "中文參數";
location.href = "B.aspx?Name=" + escape(name);
}
</script>
伺服器端接收方式同方案二,Request.QueryString["Name"] 會自動解碼。
<meta charset="utf-8">)全部採 UTF-8,從根源消除編碼不匹配。中文 URL 亂碼本質是編碼不一致。透過 Web.config 全域化設定奠定基礎,搭配 Server.UrlEncode/UrlDecode 或前端 encodeURIComponent 显式處理,即可徹底解決問題。