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

Dan*_*nyB 5 ruby-on-rails ruby-on-rails-4

我正在使用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>"
Run Code Online (Sandbox Code Playgroud)

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

我也尝试了我认为意味着"允许所有hrefs",但它没有任何效果(即使重新启动服务器后).

# In config/application.rb
config.action_view.sanitized_allowed_attributes = ['href']
Run Code Online (Sandbox Code Playgroud)

var*_*lan 8

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

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

如果选中行,Loofah::HTML5::WhiteList::ALLOWED_PROTOCOLS可是没有tel在他们的名单,因此被从锚标记条纹了.

解:

  1. 创建一个初始化程序,添加tel到上面的协议集.

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

  2. 重启应用程序,这应该工作.