现在我们正在使用消毒宝石:https://github.com/rgrove/sanitize
问题是,如果你输入“hello & world
”,sanitize将在DB中保存为:
hello & world
你如何将&
列入白名单。我们希望清理删除所有可能的恶意html和JS /脚本标记。但是我们可以使用&符号。
想法?谢谢
Sanitize将始终将输出的内容转换为有效html / xhtml的html实体。
我可以确定的最好方法是过滤输出
Sanitize.fragment("hello & world").gsub('&','&') #=> "Hello & world"
UnixMonkey的答案就是我们最终做的事情。
def remove_markup(html_str)
marked_up = Sanitize.clean html_str
ESCAPE_SEQUENCES.each do |esc_seq, ascii_seq|
marked_up = marked_up.gsub('&' + esc_seq + ';', ascii_seq.chr)
end
marked_up
end
ESCAPE_SEQUENCES是我们不希望转义的字符数组。
从Rails 4.2开始,#strip_tags
不会对HTML特殊字符进行编码
strip_tags("fun & co")
=> "fun & co"
否则你会得到以下内容:
strip_tags("<script>")
=> "<script>"
如果你只想要&符号我建议过滤输出像@Unixmonkey建议的那样只保留到&
strip_tags("<bold>Hello & World</bold>").gsub(/&/, "&")
=> "Hello & World"