-2

消毒(“你好”)=>你好

但如果我有

sanitize("<3") 它只返回 3

如果不以 < 或 > 结尾,我希望它应该允许字符串

就像我做 sanitize("<3 >4") 它应该简单地返回 <3 >4

4

2 回答 2

3

首先,Rails 的内置清理不处理格式错误的标记。

我强烈建议您使用 Sanitize gem 来处理任何可能出现格式错误的内容:

https://github.com/rgrove/sanitize

但是您的问题是非 html 编码的字符实体。通过 CGI.escape() 运行它们

require 'cgi'
CGI.escape('<3') # => "%3C3"

为了完成:

require 'cgi'
Sanitize.clean( CGI.escape('<3') ) # => "%3C3"
于 2012-12-10T16:36:43.317 回答
0

您应该对您的内容进行预清理,以正确编码您想要保留的值。例如:

content.gsub!(/\<3/, '&lt;3')

唯一需要担心的是,您的清洁工可能会双重逃避这一点,&amp;lt;3这可能会很烦人。至少如果需要的话,这是可以逆转的。

如果不去除无效的括号,就不可能“清理”。一些浏览器会在这种事情上窒息,如果处理不当,它可能会使您的页面完全损坏。

于 2012-12-10T16:29:13.080 回答