几种HtmlEncode的区别

本文详细介绍了C#中的HtmlEncode与HtmlDecode方法的区别及其与手工替换代码的不同,并对比了JavaScript中的escape/unescape、encodeURI/decodeURI及encodeURIComponent/decodeURIComponent方法。

一、C#中的编码

HttpUtility.HtmlDecodeHttpUtility.HtmlEncodeServer.HtmlDecode、Server.HtmlEncodeHttpServerUtility.HtmlDecode、HttpServerUtility.HtmlEncode的区别?

它们与下面一般手工写的代码有什么区别?

答案:

HtmlEncode:是将html源文件中不容许出现的字符进行编码,通常是编码以下字符:"<"、">"、"&"、"""、"'"等;

HtmlDecode:跟HtmlEncode恰好相反,是解码出原来的字符;

 

HttpServerUtility实体类的HtmlEncode(HtmlDecode)的简便方式,用于在运行时从ASP.NET Web应用程序访问System.Web.HttpUtility.HtmlEncode(HtmlDecode)方法,HttpServerUtility实体类的HtmlEncode(HtmlDecode)方法在内部是使用System.Web.HttpUtility.HtmlEncode(HtmlDecode)方法对字符进行编码(解码)的;

 

 

Server.HtmlEncode(Server.HtmlDecode)其实是System.Web.UI.Page类封装了HttpServerUtility实体类的HtmlEncode(HtmlDecode)的方法;

System.Web.UI.Page类有这样一个属性:public HttpServerUtility Server{get;}

 

 

所以可以认为:

Server.HtmlEncode=HttpServerUtility实体类的HtmlEncode方法=HttpUtility.HtmlEncode;

Server.HtmlDecode=HttpServerUtility实体类的HtmlDecode方法=HttpUtility.HtmlDecode;

它们只不过是为了调用方便,进行了封装而已;

 

下面是一个非常简单的替换测试代码,测试结果看注释: 

 

 

所以手工的替换方法还是很有必要的,处理一些HtmlEncode不支持的替换。

 

使用Reflector 查看 HttpUttility.HtmlEncode 的实现,我们就可以看到,它只考虑的五种情况,空格,回车是没有处理的:

 

二、JS中的编码和解码

本文摘自:http://blog.joycode.com/ghj/archives/2010/02/26/115894.joy

### 常见的编码格式种类 在计算机科学中,编码格式用于将字符转换为二进制数据以便存储和传输。以下是常见的编码格式及其特点: #### 1. ASCII (American Standard Code for Information Interchange) ASCII 是最早的编码标准之一,使用 7 位二进制数表示字符,总共可以表示 128 个字符,包括英文字母、数字和一些控制字符。ASCII 编码适用于英文字符集,但对于其他语言的支持有限[^1]。 #### 2. GB2312 和 GBK GB2312 是中国国家标准编码,扩展了 ASCII 的范围以支持简体中文字符。GBK 是 GB2312 的扩展版本,增加了对繁体中文和其他字符的支持。这些编码主要用于中文环境下的文本处理[^4]。 #### 3. Unicode Unicode 是一种国际编码标准,旨在统一所有语言的字符编码。它为每个字符分配一个唯一的编号,而不考虑具体的存储方式。Unicode 的前 128 个字符与 ASCII 完全兼容[^4]。 #### 4. UTF-8 UTF-8 是 Unicode 的一种实现方式,使用可变长度的字节来表示字符。对于 ASCII 字符,UTF-8 使用单个字节;而对于其他语言的字符,则使用多字节表示。UTF-8 是目前最常用的编码格式之一,因为它能够高效地处理多种语言的文本数据,并且与 ASCII 兼容[^2]。 #### 5. UTF-16 和 UTF-32 UTF-16 和 UTF-32 是 Unicode 的另外两种实现方式。UTF-16 使用 2 或 4 个字节表示字符,而 UTF-32 则始终使用 4 个字节表示每个字符。这两种编码格式在某些特定场景下可能会被使用,但相较于 UTF-8,它们的使用频率较低[^3]。 #### 6. HTML 编码和 CSS 编码 HTML 编码和 CSS 编码是专门用于网页和样式表的编码格式。它们通过实体引用(如 `&` 表示 `&`)或十六进制/十进制数值(如 `\u00A9` 表示版权符号 ©)来表示特殊字符[^2]。 #### 7. JSON 编码 JSON 编码是一种轻量级的数据交换格式,通常使用 UTF-8 编码来表示字符串。JSON 支持转义字符(如 `\n` 表示换行)以及 Unicode 字符的表示(如 `\uXXXX`)。 ### 示例代码 以下是一个简单的 Python 程序,演示如何使用不同的编码格式进行字符串编码和解码: ```python text = "你好,世界!" # 使用 UTF-8 编码 utf8_encoded = text.encode('utf-8') utf8_decoded = utf8_encoded.decode('utf-8') # 使用 GBK 编码 gbk_encoded = text.encode('gbk') gbk_decoded = gbk_encoded.decode('gbk') print(f"原始文本: {text}") print(f"UTF-8 编码: {utf8_encoded}, 解码: {utf8_decoded}") print(f"GBK 编码: {gbk_encoded}, 解码: {gbk_decoded}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值