为什么在清理中删除了“tel:”链接,以及如何允许它们

时间:2016-02-27 14:24:38

标签: ruby-on-rails ruby-on-rails-4

我正在使用Rails sanitize帮助程序来清理用户的输入文本,这些文本可能被格式化为降价。

我注意到该方法删除了tel:个链接,我想知道为什么,以及如何允许它们。

>> sanitize("<a href='http://123'>click</a>")
=> "<a href=\"http://123\">click</a>"
>> sanitize("<a href='tel:123'>click</a>")
=> "<a>click</a>"

当然,我已尝试从上面链接的页面中找出它,但无法做到。我宁愿避免为这个简单的任务编写“scrubber”类或任何其他类。

我也尝试过我认为意味着“允许所有href”但它没有任何效果(即使重新启动服务器后)。

# In config/application.rb
config.action_view.sanitized_allowed_attributes = ['href']

1 个答案:

答案 0 :(得分:8)

在Rails 4中,Loofah用于清理HTML。要了解更多信息,请访问this链接。

Rails团队将此功能提取到单独的gem

如果您选中this行,则Loofah::HTML5::WhiteList::ALLOWED_PROTOCOLS列表中没有tel,因此会从锚标记中删除它。

<强>解决方案:

  1. 创建一个初始化程序,将tel添加到上述协议集中。

    丝瓜:: HTML5 ::白名单:: ALLOWED_PROTOCOLS.add( '电话')

  2. 重启应用,这应该可以。