对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的结果都是一样的。

目录
相关文章
|
29天前
|
XML 前端开发 JavaScript
Html:CSS介绍
Html:CSS介绍
45 1
|
29天前
|
前端开发
Html:CSS的书写位置
Html:CSS的书写位置
24 0
|
24天前
|
前端开发 JavaScript 搜索推荐
打造个人博客网站:从零开始的HTML和CSS之旅
【9月更文挑战第32天】在这个数字化的时代,拥有一个个人博客不仅是展示自我的平台,也是技术交流的桥梁。本文将引导初学者理解并实现一个简单的个人博客网站的搭建,涵盖HTML的基础结构、CSS样式的美化技巧以及如何将两者结合来制作一个完整的网页。通过这篇文章,你将学会如何从零开始构建自己的网络空间,并在互联网世界留下你的足迹。
|
25天前
|
前端开发 JavaScript 搜索推荐
打造个人博客网站:从零开始的HTML与CSS之旅
【9月更文挑战第31天】在这个数字时代,拥有一个个人博客网站是展示自我、分享知识和连接世界的重要方式。本文将引导你通过简单的HTML和CSS知识,一步步构建起你的在线空间。无论你是编程新手还是希望通过实践加深理解,这篇文章都将是你的理想指南。我们将探索基本概念,实现页面布局,并点缀以个性化样式,最终将静态页面转变为动态交互式网站。准备好了吗?让我们开始吧!
|
28天前
|
前端开发 JavaScript
HTML+JavaScript+CSS DIY 分隔条splitter
HTML+JavaScript+CSS DIY 分隔条splitter
|
28天前
|
XML 前端开发 JavaScript
jQuery HTML / CSS 方法
jQuery HTML / CSS 方法
11 2
|
1月前
|
JavaScript 前端开发
JavaScript HTML DOM - 改变CSS
JavaScript HTML DOM - 改变CSS
23 4
|
29天前
|
前端开发 数据安全/隐私保护 容器
HTML+CSS 水滴登录页
该代码实现了一个创意的水滴登录页面,包含一个水滴形状的登录框与两个按钮(忘记密码和注册)。登录框包括用户名、密码输入框及登录按钮。页面设计独特,采用渐变色与动态效果,增强了交互性和视觉美感。以下为关键实现步骤: - 重置默认样式。 - 设置页面背景颜色和尺寸。 - 定义登录表单容器的布局、位置和尺寸。 - 设置登录表单内容样式,包括3D效果和过渡动画。 - 创建伪元素增强水滴效果。 - 设定输入框容器和输入框样式。 - 为提交按钮、忘记密码和注册按钮设定特定样式,并添加悬停效果。
WK
|
1月前
|
存储 移动开发 前端开发
HTML5和CSS5有什么区别
HTML5和CSS5在网页设计中扮演不同角色。HTML5是超文本标记语言的第五版,通过新特性如实时更新、跨平台运行及更好的安全性等,定义网页内容和结构。尽管常说CSS5,实际最新的CSS版本包含多个模块如CSS Grid和Flexbox,主要用于控制网页布局和样式,提供强大的选择器、动画支持和响应式设计,与HTML5相辅相成,共同构建现代网页的基础架构。
WK
41 3
|
1月前
|
Web App开发 前端开发 JavaScript
HTML/CSS/JS学习笔记 Day3(HTML--网页标签 下)
HTML/CSS/JS学习笔记 Day3(HTML--网页标签 下)