`
newleague
  • 浏览: 1475937 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

慎用StringEscapeUtils.escapeHtml方法【转】

 
阅读更多

推荐使用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("&lt;");
                break;
            case '>':
                buffer.append("&gt;");
                break;
            case '&':
                buffer.append("&amp;");
                break;
            case '"':
                buffer.append("&quot;");
                break;
            case 10:
            case 13:
                break;
            default:
                buffer.append(c);
            }
        }
        html = buffer.toString();
        return html;
    }
分享到:
评论

相关推荐

    org.apache.commons.lang.StringEscapeUtils

    解决json数据中,返回的数据格式中带有反斜杠 如下所示{\"Count\":\"3\",\"ErrorString\":\"\",\"Success\":true,\"URL\":\"http:\\\/\\\/172.16.80.65:8080\\\/LoginSSO.aspx?UserCode=wubg&Type=WorkItem\",\...

    escape.sql

    escape.sql

    org.apache.commons.lang jar包下载(commons-lang3-3.1.jar)

    org.apache.commons.lang.StringEscapeUtils.class org.apache.commons.lang.StringUtils.class org.apache.commons.lang.SystemUtils.class org.apache.commons.lang.UnhandledException.class org.apache....

    commons-lang3-3.6.jar

    commons-lang可以将html转以后的...String convStr = StringEscapeUtils.unescapeHtml(str);//apache的jar包:commons-lang-*.jar可以将html转换的符号转换过来(网上抄来的) Sysout(convStr);//“!@#¥%……&——+”

    MVel 2.0.15 doc

    &lt;a href="@{ua.pageURI}"&gt;@{org.apache.commons.lang.StringEscapeUtils.escapeHtml(ua.name)} Inline Ternary Operator &lt;li&gt;@{ua.hitsTotal} total @{ua.hitsTotal == 1 ? "Hit" : "Hits"}. MVEL Integration The ...

    在Java中轻松将HTML格式文本转换为纯文本(保留换行)

    第一步:引入Jsoup和lang和lang3的依赖: Jsoup是HTML解析器 lang和lang3这两个包里...import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang3.StringUtils; import org.jsoup.Jsoup; im

    org.apache.commons.lang jar包下载

    org.apache.commons.lang.StringEscapeUtils.class org.apache.commons.lang.StringUtils.class org.apache.commons.lang.SystemUtils.class org.apache.commons.lang.UnhandledException.class org.apache....

    commons-lang.jar

    org.apache.commons.lang.StringEscapeUtils.class org.apache.commons.lang.StringUtils.class org.apache.commons.lang.SystemUtils.class org.apache.commons.lang.UnhandledException.class org.apache.commons....

    commons-lang3-3.4jar.rar

    commons-lang3-3.4jar 包括org.apache.commons.lang.StringEscapeUtils类。

    消除斜杠commons-lang3-3.12.0工具类.zip

    StringEscapeUtils方法消除json反斜杠

    org.apache.commons包

    org.apache.commons 的 jar 包 12313213215646546521大夫撒旦法的得分的斯蒂芬斯蒂芬

    org.apache.commons.lang包

    Apache Commons Lang资源包,下载解压缩后,可获得api文档,源码,jar包,用于开发

    commons-lang3-3.1 API

    StringEscapeUtils – 用于正确处理转义字符,产生正确的Java、JavaScript、HTML、XML和SQL代码; StringUtils – 处理String的核心类,提供了相当多的功能; SystemUtils – 在java.lang.System基础上提供更方便的...

    commons-lang3-3.8.1.rar

    解决脚本攻击xss可用到此资源,利用org.apache.commons.lang3.StringEscapeUtils这个类对输入的参数进行html转义

    处理SQL语句commons-lang-2.6.jar

    apache工具包common-lang中有一个很有用的处理字符串的工具类,其中之一就是StringEscapeUtils,这个工具类是在2.3版本以上加上的去的,利用它能很方便的进行html,xml,java等的转义与反转义,而且还能对关键字符串...

    commons-lang3-3.1_jar

    commons-lang3-3.1_jar jar包官方下载的,亲测可用。import org.apache.commons.lang3.StringEscapeUtils;

    jfinalpluginsjfinal-dreampie.zip

    14.xss过滤的StringEscapeUtils过滤器实现 public class AttackHandler extends Handler {  @Override  public void handle(String target, HttpServletRequest request, HttpServletResponse ...

    commons-lang3-3.4.rar

    commons-lang3-3.4.rar,包括org.apache.commons.lang.StringEscapeUtils类。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...

    graffias:Graffias是受Graffiti启发的Groovy的Web框架

    什么是格拉菲亚? Graffias是受和Sinatra启发的Groovy轻量级微型网络框架。...import org.apache.commons.lang.StringEscapeUtils get( ' / ' ) { uri ' index.html ' // public/index.html } post( ' / ' )

Global site tag (gtag.js) - Google Analytics