
ASP.NET 中的字符編碼問題,一般會有兩個場景:
HttpUtility.HtmlDecode(htmlString) 或 Html.Raw(htmlString) 等。HttpUtility.UrlDecode(urlString) 或 Uri.EscapeDataString(urlString) 等,具體的流程就是上面的圖,因為涉及到 URL 及請求處理,所以對于一些特殊字符的處理,要格外小心。在 ASP.NET 中,這也是我們使用最多的一種,流程很簡單,把 HTML 標簽內容存儲到數據庫,然后再獲取出來展示,在存儲數據庫之前,一般會進行 HTML 編碼,因為 MVC 在展示的時候,會對字符型的 HTML 做保護處理,所以要對 HTML 編碼后的字符,再進行轉碼。
MVC 展示字符一般會有兩個場景:
我們來看一個代碼示例:
1. @HttpUtility.HtmlEncode("<span>test</span> ")<br />2. <span>test</span> <br />3. @("<span>test</span>")<br />4. @HttpUtility.HtmlDecode("<span>test</span> ")<br />5. @HttpUtility.HtmlDecode("<span>test</span>")<br />6. @Html.Raw("<span>test</span> ")<br />7. @Html.Raw("<span>test</span>")顯示結果:

簡單總結:
關于 URL 編碼,說簡單也簡單,說復雜也很頭疼,簡單列舉下幾種常用方式:
在最上面圖中,一共有五步流程,但都是問號,下面我用一個示例,來說明這五步具體該如何操作,示例 URL:
http://www.survivalescaperooms.com/xishuai/tag/蟋蟀·博客園&URL 空格<>test處理步驟:
在上面第4、5步的時候,URL 會變為:
http://www.survivalescaperooms.com/xishuai/tag/%E8%9F%8B%E8%9F%80%C2%B7%E5%8D%9A%E5%AE%A2%E5%9B%AD%26URL%20%E7%A9%BA%E6%A0%BC%3C%3Etest這個不需要你進行任何操作,從瀏覽器到服務器、從服務器到瀏覽器,這個過程中,URL 會進行自動轉碼和解碼,比如你在 Action 中獲取 Tag 值,并不需要使用 HttpUtility.UrlDecode 解碼操作。
不過,針對一些特殊的字符,因為第5步是請求操作,IIS 會對請求進行一些檢測,web.config 還需要進行下面配置:
<system.web> <compilation targetFramework="4.5" /> <httPRuntime requestValidationMode="2.0" requestPathInvalidCharacters="" /><!--添加的配置--></system.web><system.webServer> <modules runAllManagedModulesForAllRequests="true" /> <security> <requestFiltering allowDoubleEscaping="true"/><!--添加的配置--> </security></system.webServer>總的來說,URL 特殊字符編碼問題,只使用 Uri.EscapeDataString,然后 web.config 進行如上配置就可以了。
///2015-6-2更新:
如果 URL 包含“.”參數,如:www.survivalescaperooms.com/xishuai/tag/....../,則會出現“404”錯誤(IIS 截獲了,沒有到應用程序),但并非是 HTTP 狀態碼,解決方式:
<system.web> <httpRuntime relaxedUrlToFileSystemMapping="true" /><!--添加的配置--></system.web>新聞熱點
疑難解答