HttpUtility.HtmlEncode与UrlEncode编码字符范围技术咨询
这个问题问得好!确实官方文档有时候不会把所有编码细节列得明明白白,我来给你拆解这两个方法到底会对哪些字符动手:
HttpUtility.HtmlEncode
这个方法的核心是转义HTML中有特殊语义的字符,避免XSS攻击或者页面渲染异常,主要编码的字符包括:
- HTML核心特殊字符:这是最基础的,比如
<转成<,>转成>,&转成&,双引号"转成",单引号'转成'(部分.NET版本也会用',但主流是十进制实体) - 非ASCII字符:所有不在ASCII范围内的字符(比如中文、日文、版权符号©、商标符号™等),都会被转成对应的十进制或十六进制HTML实体(例如
中会变成中) - 控制字符:ASCII码0-31范围内的大部分控制字符(除了换行、回车、制表符这类允许在HTML中出现的)也会被编码
HttpUtility.UrlEncode
这个是为URL设计的编码方法,遵循RFC相关规范,主要处理URL中有特殊含义或不安全的字符:
- URL保留字符:这些字符在URL里有特定用途(比如分隔协议、路径、参数),包括
:、/、?、#、[、]、@、!、$、&、'、(、)、*、+、;、=,都会被转成百分号编码(例如?变成%3F) - 空格:这个是高频场景,默认会被转成
+(严格模式下也可以转成%20,但UrlEncode默认用+) - 非ASCII字符:中文、特殊符号这类非ASCII字符,会先被转换成UTF-8字节,再对每个字节做百分号编码(比如
中会变成%E4%B8%AD) - 不安全ASCII字符:ASCII码0-31、127这类控制字符,以及
"、<、>这类在URL中不安全的字符,也会被编码
如果想验证具体某个字符是否会被编码,其实可以写个简单的.NET小测试,遍历字符调用方法看结果,但上面这些就是日常开发中最常见的编码范围啦。
内容的提问来源于stack exchange,提问作者wpqs
相关产品推荐
相关产品推荐

