国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

ASP.NET 字符編碼的那些事

2019-11-17 02:04:29
字體:
來源:轉載
供稿:網友

asp.net 字符編碼的那些事

ASP.NET 中的字符編碼問題,一般會有兩個場景:

  • HTML 編碼:一般是動態顯示 HTML 字符或標簽,寫法是:HttpUtility.HtmlDecode(htmlString)Html.Raw(htmlString) 等。
  • URL 編碼:一般是作為 URL 的一部分,寫法是:HttpUtility.UrlDecode(urlString)Uri.EscapeDataString(urlString) 等,具體的流程就是上面的圖,因為涉及到 URL 及請求處理,所以對于一些特殊字符的處理,要格外小心。

HTML 編碼

在 ASP.NET 中,這也是我們使用最多的一種,流程很簡單,把 HTML 標簽內容存儲到數據庫,然后再獲取出來展示,在存儲數據庫之前,一般會進行 HTML 編碼,因為 MVC 在展示的時候,會對字符型的 HTML 做保護處理,所以要對 HTML 編碼后的字符,再進行轉碼。

MVC 展示字符一般會有兩個場景:

  • 顯示 HTML 字符(比如 < > 等特殊字符)。
  • 顯示 HTML 標簽(把字符作為 HTML 標簽顯示)。

我們來看一個代碼示例:

1. @HttpUtility.HtmlEncode("&lt;span&gt;test&lt;/span&gt; ")<br />2. &lt;span&gt;test&lt;/span&gt; <br />3. @("<span>test</span>")<br />4. @HttpUtility.HtmlDecode("&lt;span&gt;test&lt;/span&gt; ")<br />5. @HttpUtility.HtmlDecode("<span>test</span>")<br />6. @Html.Raw("&lt;span&gt;test&lt;/span&gt; ")<br />7. @Html.Raw("<span>test</span>")

顯示結果:

簡單總結:

  • HttpUtility.HtmlDecode 和 Html.Raw 作用并不相同。
  • HttpUtility.HtmlDecode 僅僅是對編碼后的 HTML 進行轉碼,效果和第三點一樣。
  • Html.Raw 是對原字符進行直接輸出,是什么就是什么。
  • HttpUtility.HtmlDecode 一般會用在顯示 HTML 字符。
  • Html.Raw 一般會用在顯示 HTML 標簽。

URL 編碼

關于 URL 編碼,說簡單也簡單,說復雜也很頭疼,簡單列舉下幾種常用方式:

  • HttpUtility.UrlEncode:最常用的一種,一般是對參數進行編碼,但對于一些特殊字符不適用,而且 URL 顯示不友好。
  • Uri.EscapeDataString:相關博文,處理一些特殊字符(+),需要在 web.config 中配置 allowDoubleEscaping 為 true。

在最上面圖中,一共有五步流程,但都是問號,下面我用一個示例,來說明這五步具體該如何操作,示例 URL:

http://www.survivalescaperooms.com/xishuai/tag/蟋蟀·博客園&URL 空格<>test

處理步驟:

  1. 從界面提交到應用服務器,不進行轉碼,值為:蟋蟀·博客園&URL 空格<>test。
  2. 從應用服務器提交到數據庫,不進行轉碼,值為:蟋蟀·博客園&URL 空格<>test。
  3. 從數據庫獲取到應用服務器,不進行解碼,值為:蟋蟀·博客園&URL 空格<>test。
  4. 從應用服務器展現到地址欄,進行轉碼(Uri.EscapeDataString),值為:蟋蟀·博客園%26URL%20空格<>test。
  5. 從瀏覽器響應到應用服務器,不進行解碼,值為:蟋蟀·博客園&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>

上一篇:HTTP 錯誤 500.0

下一篇:Memcached原理分析

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 股票| 肇庆市| 涪陵区| 正蓝旗| 铁力市| 资溪县| 莆田市| 黑河市| 南陵县| 紫云| 乐至县| 应城市| 祁门县| 望谟县| 宿迁市| 泽普县| 鲁山县| 大丰市| 紫阳县| 永吉县| 南部县| 秀山| 怀柔区| 迭部县| 武邑县| 张家口市| 富裕县| 孟连| 牟定县| 孝昌县| 抚远县| 鄄城县| 武强县| 萍乡市| 正镶白旗| 定兴县| 兴安盟| 伊宁县| 永德县| 尖扎县| 阿图什市|