对HtmlEncode的增强——HtmlEntitiesEncode

简介: 工作中我们常常需要加壳(escape)后传输或保存HTML文本,UI层使用时再进行脱壳(unescape)。 很庆幸.net为我们提供了非常好用的HttpUtility类,加壳时可采用HtmlEncode方法,脱壳时采用HtmlDecode。

工作中我们常常需要加壳(escape)后传输或保存HTML文本,UI层使用时再进行脱壳(unescape)。
很庆幸.net为我们提供了非常好用的HttpUtility类,加壳时可采用HtmlEncode方法,脱壳时采用HtmlDecode。
但实际使用这两个方法时,即可知道HtmlDecode很好很实用;HtmlEncode却显得先天不足,仅能转换很少的一些html标记(如:<),
中文、全角符号或大量的特殊字符根本没有进行转换。因此在传输或保存入库时总会遇到这样那样的问题。

解决这一问题的方法其实很简单,每一个可敲出的字符总是对应了一个Unicode编码,而编码又对应了一个32位的整形数字,
那么使用 {数字}; 的形式就可以转换文本,即HtmlEntities
[关于HtmlEntities可查看:http://www.cnblogs.com/templates/waxdoll/htmlentities.htm]

转换的函数:

 1      /**/ /// <summary>
 2    /// HTMLEntitiesEncode(HTMLEntities编码)
 3    /// </summary>
 4    /// <param name="text">需要转换的html文本</param>
 5    /// <returns>HTMLEntities编码后的文本</returns>

 6      public   static   string  HtmlEntitiesEncode( string  text)
 7      {
 8        // 获取文本字符数组
 9        char[] chars = HttpUtility.HtmlEncode(text).ToCharArray();
10        
11        // 初始化输出结果
12        StringBuilder result = new StringBuilder(text.Length + (int)(text.Length * 0.1));
13
14        foreach (char c in chars)
15        {
16            // 将指定的 Unicode 字符的值转换为等效的 32 位有符号整数
17            int value = Convert.ToInt32(c);
18
19            // 内码为127以下的字符为标准ASCII编码,不需要转换,否则做 {数字}; 方式转换
20            if (value > 127)
21            {
22                result.AppendFormat("{0};", value);
23            }

24            else
25            {
26                result.Append(c);
27            }

28        }

29
30        return result.ToString();
31    }

(使用时记得引入 using System.Text

测试代码:

 1      protected   void  Button3_Click( object  sender, EventArgs e)
 2      {
 3        // 常规HtmlEncode编码
 4        string strHtmlEncode = HttpUtility.HtmlEncode("<tr><td>《sss123┏你好啊┓123®はい》</td></tr>");
 5
 6        // 增强的HtmlEntities编码
 7        string strHtmlEntitiesEncode = HtmlEntitiesEncode("<tr><td>《sss123┏你好啊┓123®はい》</td></tr>");
 8
 9        string strHtmlDecode1 = HttpUtility.HtmlDecode(strHtmlEncode);
10
11        string strHtmlDecode2 = HttpUtility.HtmlDecode(strHtmlEntitiesEncode);
12    }

运行时监视截图:


可以很清楚的看到增强的HtmlEncode方法较完美地转换了中文或一些特殊字符,而且HtmlDecode的结果都是一样的。

目录
相关文章
|
13天前
|
前端开发 JavaScript 开发工具
【HTML/CSS】入门导学篇
【HTML/CSS】入门导学篇
21 0
|
3天前
|
数据采集 前端开发 网络协议
如何使用代理IP通过HTML和CSS采集数据
如何使用代理IP通过HTML和CSS采集数据
|
8天前
|
前端开发 搜索推荐 数据安全/隐私保护
HTML标签详解 HTML5+CSS3+移动web 前端开发入门笔记(四)
HTML标签详解 HTML5+CSS3+移动web 前端开发入门笔记(四)
18 1
|
8天前
|
PHP
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
|
14天前
|
JSON JavaScript 前端开发
js是什么、html、css
js是什么、html、css
|
16天前
|
XML 前端开发 JavaScript
css和html
【4月更文挑战第7天】css和html
12 0
|
20天前
|
人工智能 前端开发 JavaScript
【前端设计】HTML+CSS+JavaScript基本特性
【前端设计】HTML+CSS+JavaScript基本特性
|
1月前
使用html+css制作一个发光立方体特效
使用html+css制作一个发光立方体特效
22 2
使用html+css制作一个发光立方体特效
|
1月前
超简单的html+css魔幻霓虹灯文字特效
超简单的html+css魔幻霓虹灯文字特效
13 3
超简单的html+css魔幻霓虹灯文字特效