我使用AntiSamy来清理用户输入,效果很好。有一个问题:它编码单引号和双引号。因此,如果我想要编辑某些内容,则会呈现my sample's
而不是my sample's
- 单引号会被编码。
要澄清:broswer正确呈现引号,但它们作为HTML实体保存在我的数据库中。因此,当用户加载帖子进行编辑时,HTML实体将显示在文本字段中。
我的用户可以发布代码和其他各种内容。所以AntiSamy在那里做得很好。但我不想在普通文本中转换单引号和双引号。
我有哪些选择?
答案 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版本原始版本已修改。