Rails - 如何只转义<script>标记

时间:2016-03-01 08:29:22

标签: ruby-on-rails

在Rails中,我看到&#xA; + html_escape:转义所有标签。
&#xA; + sanitize:删除所有不在whilelist中的标签。

&#xA;&#xA;

现在,我只想要转义脚本标记,而不是转义其他标记。

&#xA;&#xA;

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

&#xA;

4 个答案:

答案 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,则可能需要此功能。

Rails::HTML::TargetScrubber

答案 2 :(得分:0)

string.gsub!(/<(?=script)||(?<=script)>/) {|x| "#\{x}"}

答案 3 :(得分:0)

Rails为字符串/ HTML实体提供了很多选项

  s = "<script>alert('Hello');</script>"  

选项:WhiteListSanitizer

 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');"

请参阅此链接

How to show some HTML entities on title tag using Rails