如何在java中取消单引号和双引号的编码?

如何在java中取消单引号和双引号的编码?,java,quotes,sanitization,Java,Quotes,Sanitization,我用它来清理用户输入,效果很好。有一个问题:它编码单引号和双引号。因此,如果我想编辑某些内容,mysample's被呈现,而不是我的示例的——单个引号被编码 澄清:broswer正确呈现引号,但它们会作为HTML实体保存在my db中。因此,当用户加载文章进行编辑时,HTML实体将显示在文本字段中 有没有办法绕过这个限制 我应该使用/是否有其他工具 我的用户可以发布代码和其他各种东西。所以反艾米在那里做得很好。但我不想在普通文本中转换单引号和双引号 我有什么选择?如果反艾米没有反转方法

我用它来清理用户输入,效果很好。有一个问题:它编码单引号和双引号。因此,如果我想编辑某些内容,
mysample's
被呈现,而不是
我的示例的
——单个引号被编码

澄清:broswer正确呈现引号,但它们会作为HTML实体保存在my db中。因此,当用户加载文章进行编辑时,HTML实体将显示在文本字段中

  • 有没有办法绕过这个限制
  • 我应该使用/是否有其他工具
  • 我的用户可以发布代码和其他各种东西。所以反艾米在那里做得很好。但我不想在普通文本中转换单引号和双引号


    我有什么选择?

    如果反艾米没有反转方法,那么这件事尤其可以由commons-lang的
    StringEscapeUtils.unescapeHTML(…)
    处理


    浏览器知道如何显示
    &apos,所以应该没有问题。仅当您要在文本区域或其他输入控件中显示文本,或在浏览器外部显示文本时,才使用上述方法。

    如果您所需要的只是转义输入中的潜在危险字符,则可以将该输入以原始形式存储在数据库中,并在输出时对其进行编码

    String s = "string unencode ' "NOW"";
    String unencoded = s.replaceAll("'", "'").replaceAll(""","\"");
    myTextField.setText(unencoded);
    

    如果编码过程更复杂(即应用了一些标记白名单或格式规则),您可以存储输入的两个版本-一个用于显示的编码HTML版本和一个用于编辑的原始版本,并在修改原始版本时更新HTML版本。

    抱歉,我没有很好地解释自己。我说的是,当用户加载一篇文章进行编辑时,文本字段显示原始文本,其中包含HTML实体。所以反艾米是在我的东西进入数据库之前对它进行编码。这很好。我只是不希望它在普通文本中编码单引号和双引号——比如StackOverFlow。它们对所有内容进行编码,但它们引用普通文本。我希望这是有意义的。此外,不能使用StringUnescapeUtils,因为它可能会对危险的输入进行编码。我想我只是想对我编码的东西和不编码的东西有所选择。那么我的第一段应该适合you@dee-为了显示,仅将其用于取消显示输入。在StringEscapeutils不起作用之后,您将再次通过AntiSamy传递编辑的输入。它将对潜在的危险输入进行编码。当它编码单引号时,它还将编码HTML括号和脚本示例,不是吗?谢谢。这有点棘手,因为有些用户可以编辑其他人的帖子。这意味着必须对原始文本进行消毒,以使其正常工作。但它必须对hamrful内容进行消毒,同时保留复杂的格式规则和示例代码。。。它不应该在普通文本中对引号进行编码。StackOverFlow就是一个很好的例子。他们对一切都进行消毒。但是当你去编辑你的帖子时,一切都很好。单引号和双引号没有编码。@dee:我相信StackOverflow使用了上述第二种方法。