4

我的 Rails 应用程序使用 RDiscount 从用户提供的降价文本生成 HTML,我注意到锚标记没有 rel="nofollow"。这对我来说是个大问题,因为我的应用程序对公众开放。有没有办法启用 nofollow 链接,还是有更好的解决方案?

谢谢!

4

4 回答 4

3

我认为这只有使用Kramdown 才有可能,它是一个具有扩展语法的 ruby​​ Markdown 解析器。然后你会这样做,如链接所示:

[link](test.html){:rel='nofollow'}
于 2011-01-16T13:34:19.390 回答
2

同时,我正在使用这个技巧,通过重新解析 RDiscount 输出并向每个锚点添加一个 rel="nofollow" :

def markdown(input)
  html = RDiscount.new(input).to_html
  doc = Nokogiri::HTML::DocumentFragment.parse(html)
  doc.css("a").each do |link|
    link['rel'] = 'nofollow'
  end
  doc.to_html
end

虽然我认为这应该由降价解析器来处理。

于 2011-01-17T00:28:04.143 回答
1

我需要做类似的事情,添加target="_new"到所有链接。使用Kramdown和自定义Kramdown::Converter::Html类解决了它。

定义一个Kramdown::Converter::Html子类(某些自动加载路径中的 kramdown/converter/my_html.rb)

class Kramdown::Converter::MyHtml < Kramdown::Converter::Html
  def convert_a(el, indent)
    el.attr['target'] = '_new'
    super
  end
end

我在 app/helpers/application_helper.rb 也有一个视图助手

def markdown(str)
  Kramdown::Converter::MyHtml.convert(Kramdown::Document.new(str).root)[0].html_safe
end

理想情况下,它应该可以只使用Kramdown::Document.new(str).to_my_html.html_safe,但我无法让它在 Rails 开发模式下工作,因为 Kramdown 使用它const_defined?来查看转换器是否可用并且不会触发自动加载器。如果您知道如何解决此问题,请发表评论。

于 2011-10-18T13:14:06.283 回答
0

RDiscount 上有一个开放的功能请求,以支持以这种方式修改链接。

它计划用于即将发布的 RDiscount 2.1.5.x 版本之一。

于 2013-04-28T16:30:27.530 回答