我正在开发一个Rails应用程序,其HAML模板经常使用名为sanitize
的例程。我从上下文中推断出这个例程可以清理用户控制的HTML。例如:
# views/feed_items/_about.html.haml
%h3 Summary:
.description
= sanitize @feed_item.description
我想让这个例程将'rel = nofollow'添加到所有出站链接,除了它已经在做的事情。最简单的方法是什么?
N.B。我没有运气找到这种方法的定义,或者它的官方配置旋钮。供应商目录中有两个不同的HTML清洁剂宝石,我甚至无法弄清楚正在使用哪一个。这是一个庞大而复杂的Web应用程序,我没有写,我几乎不了解Ruby,更不用说Rails的所有扩展了。请假设我不知道您认为显而易见的任何事情。
答案 0 :(得分:1)
如果存在rel
标签,消毒器将去除它们。
我遇到了类似的问题,并在clean_links
模块中添加了一个附加的辅助方法-ApplicationHelper
,并在对内容进行消毒后对其进行了命名。
# application_helper.rb
def clean_links html
html.gsub!(/\<a href=["'](.*?)["']\>(.*?)\<\/a\>/mi, '<a href="\1" rel="nofollow">\2</a>')
html.html_safe
end
此方法查找所有<a>
标签,并添加rel =“ nofollow”。 html_safe
方法是必需的,否则HTML将显示为字符串(已被清理)。
此解决方案将所有链接均等对待,因此,如果您只希望指向域外的链接,则必须相应地更新REGEX。
您认为:<%= clean_links sanitize(@something) %>
因此,首先要清理内容,然后在显示链接之前添加rel =“ nofollow”标签。
答案 1 :(得分:0)
实际上有一种内置方式:
sanitize "your input", scrubber: Loofah::Scrubbers::NoFollow.new