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

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

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

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

我也尝试过我认为意味着“允许所有href”的内容,但没有任何效果(即使在重新启动服务器之后)。
# In config/application.rb
config.action_view.sanitized_allowed_attributes = ['href']

最佳答案

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

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

如果检查this行,则Loofah::HTML5::WhiteList::ALLOWED_PROTOCOLS的列表中没有tel,因此已从定位标记中剥离了tel

解决方案:

  • 创建一个初始化程序,该初始化程序将ojit_code添加到上述协议(protocol)集中。

    丝瓜络:: HTML5::WhiteList::ALLOWED_PROTOCOLS.add('tel')
  • 重新启动应用程序,这应该可以工作。
  • 关于ruby-on-rails - 为什么在清理过程中删除 "tel:"链接,以及如何允许它们,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35670896/

    10-13 01:25