2016-02-27 34 views
4

我正在使用Rails sanitize幫助程序清理用戶的輸入文本,該文本可能被格式化爲降價。爲什麼在電子郵件中刪除「tel:」鏈接以及如何允許他們

我注意到該方法去掉了tel:鏈接,我不知道爲什麼,我該如何允許它們。

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

當然,我試圖從上面鏈接的頁面找出它,但無法。我寧願避免寫一個「洗滌器」類或任何其他類來完成這個簡單的任務。

我也嘗試了我認爲的意思是「允許所有hrefs」,但它沒有任何影響(即使重新啓動服務器後)。

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

回答

7

在Rails 4中,Loofah正在用於消毒HTML。要了解更多請訪問this鏈接。

Rails團隊將此功能提取爲單獨的gem

如果你檢查this行,Loofah::HTML5::WhiteList::ALLOWED_PROTOCOLS沒有在他們的列表中,那麼它將從錨定標記中被剝離。

解決方案:

  1. 創建將增加tel上述協議集的初始化。

    絲瓜:: HTML5 ::白名單:: ALLOWED_PROTOCOLS.add( '電話')

  2. 重新啓動應用程序,這應該工作。
+0

我希望能有這麼好的答案,所以非常感謝。馬上嘗試。我認爲應該允許「tel:」鏈接默認是錯誤的嗎?我的意思是這有什麼害處? – DannyB

+1

@DannyB yeah'tel:'我應該允許默認的鏈接。也許你可以在'rails-html-sanitizer' gem中打開這個問題,並詢問他們爲什麼'tel:'不在默認情況下列表中。 :) – varunvlalan

+1

已打開[問題#52](https://github.com/rails/rails-html-sanitizer/issues/52) - 希望他們能夠實施。 – DannyB

相關問題