你如何在java中解码单引号和双引号?

时间:2011-09-20 19:07:20

标签: java quotes sanitization

我使用AntiSamy来清理用户输入,效果很好。有一个问题:它编码单引号和双引号。因此,如果我想要编辑某些内容,则会呈现my sample's而不是my sample's - 单引号会被编码。

澄清:broswer正确呈现引号,但它们作为HTML实体保存在我的数据库中。因此,当用户加载帖子进行编辑时,HTML实体将显示在文本字段中。

  1. 有没有办法解决这个限制?
  2. 我应该使用/有不同的工具吗?
  3. 我的用户可以发布代码和其他各种内容。所以AntiSamy在那里做得很好。但我不想在普通文本中转换单引号和双引号。

    我有哪些选择?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

如果AntiSamy没有逆转方法,那么这件事尤其可以由来自commons-lang的StringEscapeUtils.unesacpeHtml(..)来处理。

浏览器知道如何展示',所以应该没有问题。仅当您要在textarea或其他输入控件中或在浏览器外显示文本时才使用上述内容。

答案 2 :(得分:1)

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

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