在Rails中,我看到
 + html_escape:转义所有标签。

 + sanitize:删除所有不在whilelist中的标签。
现在,我只想要转义脚本标记,而不是转义其他标记。


您有解决方案吗?谢谢大家!

答案 0 :(得分:1)
当您使用rails 4.2.5时,可以使用随rails安装的https://github.com/rails/rails-html-sanitizer。您可以执行以下操作以仅转义脚本标记。
scrubber = Rails::Html::TargetScrubber.new
scrubber.tags = ['script']
html_fragment = Loofah.fragment('<script></script><div></div>')
html_fragment.scrub!(scrubber)
html_fragment.to_s # o/p "div></div>"
答案 1 :(得分:0)
string = '<html> <title> <head> <script type="javascript"></script> </head> </title> </html>'
string.gsub(/<script.*[\s\S]*\/script>/,"")
=> "<html> <title> <head> </head> </title> </html>"
<强>更新强>
如果您使用的是Rails 4.2.5,则可能需要此功能。
答案 2 :(得分:0)
string.gsub!(/<(?=script)||(?<=script)>/) {|x| "#\{x}"}
答案 3 :(得分:0)
Rails为字符串/ HTML实体提供了很多选项
s = "<script>alert('Hello');</script>"
white_list_sanitizer = Rails::Html::WhiteListSanitizer.new
white_list_sanitizer.sanitize(s, tags: %w())
white_list_sanitizer.sanitize(s, tags: %w(table tr td), attributes: %w(id class style))
=> "alert('Hello');"
请参阅此链接