·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> ASP.NET网站开发 >> ASP.NET 字符编码的那些事
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.cnblogs.com/xishuai/tag/蟋蟀·博客园&URL 空格<>test
处理步骤:
在上面第4、5步的时候,URL 会变为:
http://www.cnblogs.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.cnblogs.com/xishuai/tag/....../
,则会出现“404”错误(IIS 截获了,没有到应用程序),但并非是 HTTP 状态码,解决方式:
<system.web> <httpRuntime relaxedUrlToFileSystemMapping="true" /><!--添加的配置--></system.web>