我试图在 Rails 中转义用户生成的内容。我使用带有 sanitize 和 raw 助手的 raw 来过滤这样的内容:
raw(sanitize(code, :tags => ['<', 'h2','h3','p','br','ul','ol','li','code','pre','a'] ))
内容中允许提及的标签列表。
问题是当我尝试使用这样的 sql 查询对其进行测试时:
mysql -u sat -p -h localhost database < data.sql
在 pre 和 code block 中,它会删除小于号 (<) 之后的所有内容。
请帮我想办法做到这一点。
最佳答案
我认为使用 Rails 中的默认清理方法是不可能的。
改为尝试使用 Sanitize gem ( https://github.com/rgrove/sanitize )
require 'sanitize'
allowed_elements = ['h2','h3','p','br','ul','ol','li','code','pre','a']
code = "<pre>mysql -u sat -p -h localhost database < data.sql</pre>"
Sanitize.fragment(code, elements: allowed_elements)
# => <pre>mysql -u sat -p -h localhost database < data.sql</pre>
要使用它来将经过清理的内容保存到数据库中,请向您的模型添加一个 before_save
过滤器,该过滤器对用户生成的内容运行清理并存储结果,例如
class MyModel < ActiveRecord::Base
ALLOWED_ELEMENTS = ['h2','h3','p','br','ul','ol','li','code','pre','a']
before_save :sanitize_code
private
def sanitize_code
self.code = Sanitize.fragment(code, elements: ALLOWED_ELEMENTS)
end
end
当您输出内容时,您只需要使用原始 View 助手,例如
<%= raw @instance.code %>
关于html - ruby rails : Allow less than sign '<' inside code block with sanitize helper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36371252/