【问题标题】:Escaping special characters in Java在 Java 中转义特殊字符
【发布时间】:2015-05-12 14:18:49
【问题描述】:

我支持的应用程序正在接受安全审查,并且存在一些关于转义特殊字符的问题。我很长时间没有支持这个应用程序,而且我对转义特殊字符不是很了解。我被问到的问题是“你为什么要对值进行 JavaScript 编码,然后再对其进行 HTML 编码?该值是否写在需要为两个上下文编码值的上下文中?”

使用的 JavaScript 编码和使用的 HTML 编码有什么区别?为什么我的代码中需要两者?

任何有关这方面的信息将不胜感激!

public class HTMLEncodedResultSet extends ResultSetWrapper {

    public HTMLEncodedResultSet(ResultSet resultSet) {
        super(resultSet);
    }

    public String getString(int columnIndex) throws SQLException {
        return StringEscapeUtils.escapeHtml(StringEscapeUtils.escapeJavaScript(super.getString(columnIndex)));
    }

    public String getString(String columnName) throws SQLException {
        return StringEscapeUtils.escapeHtml(StringEscapeUtils.escapeJavaScript(super.getString(columnName)));
    }

}

【问题讨论】:

  • Java =/= JavaScript。移除了 JS 标签。
  • 请澄清。我不确定我理解你的意思
  • 你用“JavaScript”标记了这个问题。这个问题与 JavaScript 无关,所以我删除了标签。
  • Java is not Javascript。不要在此处标记不相关的标签

标签: java javascript html encode html-escape-characters


【解决方案1】:

来自官方文档:

escapeHtml

使用 HTML 实体转义字符串中的字符。

例如:

“面包”和“黄油”

变成:“面包”和“黄油”。

escapeJavaScript

使用 JavaScript 字符串规则转义字符串中的字符。

将它找到的任何值转义到它们的 JavaScript 字符串形式中。交易 正确使用引号和控制字符(制表符、反斜杠、cr、ff 等)

所以制表符变成了字符“\”和“t”。

例子:

输入字符串:他没有说,“停止!”输出字符串:他没有说, \"停下!\"

因此,鉴于 JS 和 HTML 保留字符不相同,在您的情况下,如果输入包含 HTML 和 JS 代码,则可能需要调用这两种方法。

【讨论】:

    【解决方案2】:

    看起来您的应用程序在数据库中存储了 JavaScript sn-ps。这些 sn-ps 可能会创建或包含 HTML 部分(即,用于基于交互生成动态 HTML)。当从 DB 加载这些 sn-ps 作为 Java 中的字符串时,需要 JavaScript 和 HTML 编码。

    这是一个可以存储在 DB 中的值的示例。

    var obj = $('#fire');
    var fps = 200;
    var letters = obj.html().split('');
    obj.empty();
    $.each(letters,function(el){
        obj.append($('<span>'+this+'</span>'));
    });
    var animateLetters = obj.find('span');
    setInterval(function(){
        animateLetters.each(function(){
            $(this).css('fontSize', 80+(Math.floor(Math.random()*50)));        
        });
    },fps);
    

    参考文档:

    escapeHTML:使用 HTML 实体转义字符串中的字符。

    例如:

    “面包”和“黄油”

    变成:&amp;quot;bread&amp;quot; &amp;amp; &amp;quot;butter&amp;quot;

    escapeJavaScript: 将它找到的任何值转义到它们的 JavaScript 中 字符串形式。正确处理引号和控制字符(选项卡, 反斜杠、cr、ff 等)

    所以制表符变成了字符“\”和“t”。

    Java 字符串和 JavaScript 字符串的唯一区别是 在 JavaScript 中,必须对单引号进行转义。

    例子:

    输入字符串:他没有说,“停止!”输出字符串:他没有说, \"停下!\"

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-21
    • 2020-06-21
    • 2010-11-16
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    相关资源
    最近更新 更多