推荐使用Apache commons-lang的StringUtils来增强Java字符串处理功能,也一直在项目中大量使用StringUtils和StringEscapeUtils这两个实用类。

最近在数据库里发现某个表的内容全都成了HTML entity表示,中文也全被转换成了”我”这样的格式,而在页面上显示一切正常。最终发现造成这个后果的原因是在将字符串保存到 数据库之前,用StringEscapeUtils.escapeHtml对其进行了处理。

字符串过滤是在许多Web应用开发中需要考虑的问题。比如用户输入一个左尖括号(<),在输出HTML代码对其进行显示的话,应该 用”&lt;”来表示。是在用户将表单提交后就做转换呢,还是在从数据库取出内容向用户展示时再转换?这个问题需要仔细考虑。在入库前转换,看似 一劳永逸,然而如果用户需要编辑这个内容,你需要原路退回,做个逆向的转换,这看起来比较麻烦。所以大部分的转换都是在从数据库中取出数据之后做 的,struts的bean:write标签 的filter属性就是控制这个开关的(默认为true)。

而某些内容是不会被编辑的,比如一般的电子邮件,这类就可以在用户提交表单之时转换,一劳永逸。于是我使用了StringEscapeUtils.escapeHtml来做这个工作。

如果是英文内容,没有任何问题,然而它将一个中文字符转换成了8个字符。在UTF-8的编码 中,每个汉字占用三个字节,每个英文字符占用一个字节。这样的转换造成了大量的空间浪费。

简单的办法是自己写一个escapeHtml方法,替换左右尖括号就可以了。虽然还有一些HTML entity未被转换,可能造成输出的网页不符合web标准,但是大部分浏览器都可以正常显示也就够了。

对要输出的网页内容编码,网上搜的方法。

public static String htmlEncode(String source) {
if (source == null) {
return "";
}
String html = "";
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < source.length(); i++) {
char c = source.charAt(i);
switch (c) {
case '<':
buffer.append("<");
break;
case '>':
buffer.append(">");
break;
case '&':
buffer.append("&");
break;
case '"':
buffer.append(""");
break;
case 10:
case 13:
break;
default:
buffer.append(c);
}
}
html = buffer.toString();
return html;
}

慎用StringEscapeUtils.escapeHtml方法【转】的更多相关文章

  1. 慎用StringEscapeUtils.escapeHtml步骤

    慎用StringEscapeUtils.escapeHtml方法[转] 推荐使用Apache commons-lang的StringUtils来增强Java字符串处理功能,也一直在项目中大量使用Str ...

  2. 在.NET Framework中慎用DirectoryInfo.GetFiles方法

    .NET Framework中的DirectoryInfo.GetFiles方法,可以在一个文件夹下通过通配符找出符合条件的文件. 我们首先在文件夹C:\DemoFolder下定义两个文件:demo. ...

  3. 利用StringEscapeUtils对字符串进行各种转义与反转义(Java)

    apache工具包common-lang中有一个很有用的处理字符串的工具类,其中之一就是StringEscapeUtils,这个工具类是在2.3版本以上加上的去的,利用它能很方便的进行html,xml ...

  4. StringEscapeUtils的使用

    使用commons-lang.jar import org.apache.commons.lang.StringEscapeUtils; public class T { public static ...

  5. StringEscapeUtils的常用使用,防止SQL注入及XSS注入

    StringEscapeUtils的常用使用,防止SQL注入及XSS注入 2017年10月20日 11:29:44 小狮王 阅读数:8974   版权声明:本文为博主原创文章,转载请注明出处. htt ...

  6. java中反向转义org.apache.commons.lang3.StringEscapeUtils.unescapeJava

    工具类中包含类反向转义的方法: eorderHistory.setSubPrintTemplates(StringEscapeUtils.unescapeJava(eorderHistory.getS ...

  7. Java - 利用StringEscapeUtils对字符串进行各种转义与反转义

    来自:http://blog.csdn.net/chenleixing/article/details/43456987 --------------------------------------- ...

  8. 防止xss(脚本攻击)的方法之过滤器

    一  什么是脚本注入 概念我就不说了 直接百度一份 XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中.比如这些代码包括HTML代码和客户端 ...

  9. commons-lang常用工具类StringEscapeUtils使用--转

    https://my.oschina.net/ydsakyclguozi/blog/341496 在apache commons-lang(2.3以上版本)中为我们提供了一个方便做转义的工具类,主要是 ...

随机推荐

  1. 安全-分析深圳电信的新型HTTP劫持方式

    ISP的劫持手段真是花样百出,从以前的DNS(污染)劫持到后来的共享检测,无不通过劫持正常的请求来达到他们的目的. 之前分析过通过劫持HTTP会话,插入iframe来检测用户后端有无共享行为,但后来移 ...

  2. PostgreSQL and bloat

    The bucardo project has released its nagios plugins for PostgreSQL and we can extract from them this ...

  3. Google perf tools for nginx

    注意:本教程仅适用于Linux. 下面为大家介绍google-perftools的安装,并配置Nginx和MySQL支持google-perftools. 首先,介绍如何优化Nginx: 1,首先下载 ...

  4. C# Timer用法及实例详解

    C# Timer用法有哪些呢?我们在使用C# Timer时都会有自己的一些总结,那么这里向你介绍3种方法,希望对你了解和学习C# Timer使用的方法有所帮助. 关于C# Timer类  在C#里关于 ...

  5. ASP.NET MVC2中Controller向View传递数据的三种方式

    转自:http://www.cnblogs.com/zhuqil/archive/2010/08/03/Passing-Data-from-Controllers-to-View.html 在Asp. ...

  6. HBase(六): HBase体系结构剖析(上)

    HBase隶属于hadoop生态系统,它参考了谷歌的BigTable建模,实现的编程语言为 Java, 建立在hdfs之上,提供高可靠性.高性能.列存储.可伸缩.实时读写的数据库系统.它仅能通过主键( ...

  7. android ANR

    下面有两篇关于Android ANR的文章,感觉不错,分享一下! [Android实例] [Sundy系列]网上绝无仅有的Log分析教程及例子!android ANRhttp://blog.csdn. ...

  8. 在阿里云 centos 6.3上面安装php5.2(转)

    由于php程序使用了Zend Optimizer,只能使用php5.2, yum 上的php 是5.3的版本,只能重新安装php:安装步骤如下: 先卸载 php5.3的相关东西: yum remove ...

  9. centos 安装sphinx

    官网下载 :http://sphinxsearch.com/downloads/sphinx-2.2.10-release.tar.gz/thankyou.html 安装sphinx 解压 tar z ...

  10. DIV的垂直居中

    一直以来都没有找到一种完美解决DIV垂直居中的方法,今天终于找到了,特记录如下,从此不再用table来居中了.^^ <html> <style> #image{ width:5 ...