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

ASP.NET Server.HtmlEncode 與 UrlEncode 差異深度解析 (一)

     編輯:關於C語言

專案中傳遞含中文與特殊字元的 QueryString 時,常混淆 Server.HtmlEncode 與 Server.UrlEncode。本文系統比較兩者編碼規則、輸出差異與適用場景。

HtmlEncode:HTML 內容編碼

  • 目的:防止瀏覽器將字串解析為 HTML 標籤/實體 (XSS 防護)。
  • 編碼集合:&→&amp;、<→&lt;、>→&gt;、"→&quot;、'→&#39;、非 ASCII 字元 → &#xxxx; (數值實體)。
  • 輸出範例:DK51700中繼站 → DK51700中练站 (頁面原始碼);瀏覽器顯示正常中文。

UrlEncode:URL 元件編碼

  • 目的:確保字串可安全置於 URL 路徑、查詢字串、表單資料中,不破壞 URL 結構。
  • 編碼規則:空格→+,保留字元 (; / ? : @ & = + $ ,) 視情境編碼,非 ASCII → UTF-8 位元組 %XX 序列 (預設系統編碼頁,可指定 UTF-8)。
  • 輸出範例:DK51700中繼站 → DK51700%D6%D0%BC%C6%D5%BE (網址列);瀏覽器自動解碼顯示中文。

核心差異對照

特性HtmlEncodeUrlEncode
目標上下文HTML 內容/屬性值URL 路徑/QueryString/POST Body
空格處理不變 (或 &nbsp;)+ (或 %20)
非 ASCII數值實體 &#nnnn;UTF-8 %XX 序列
< 處理&lt;%3C
解碼對應HtmlDecodeUrlDecode
瀏覽器自動解碼否 (需 HTML 解析器)是 (網址列/表單提交)

常見錯誤場景

  1. 用 HtmlEncode 做 QueryString:產生 &lt; 導致伺服器解析參數錯誤 (如 ?q=DK51700%u4e2d&lt;p%u4e2d 被解析為兩個參數)。
  2. 用 UrlEncode 做 HTML 輸出:%3Cscript%3E 直接輸出至 HTML,瀏覽器不解碼,顯示亂碼,且若經雙重解碼可能觸發 XSS。
  3. 雙重編碼/解碼不匹配:UrlEncode(HtmlEncode(s)) 需 HtmlDecode(UrlDecode(s)),順序顛倒即失敗。

下一篇預告

實測混合 HTML 標籤字元時的 ASP.NET 要求驗證攔截行為,並提供 Base64、雙重編碼、POST Body 等解決方案。

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