2011-01-16 3 views
4

내 레일 앱이 RDiscount를 사용하여 사용자가 제공 한 태그 다운 텍스트에서 HTML을 생성하고 있으며 앵커 태그에 rel = "nofollow"가없는 것으로 나타났습니다. 내 앱이 대중에게 공개되므로 큰 문제입니다. nofollow 링크를 활성화하는 방법이 있습니까? 아니면 더 나은 솔루션이 있습니까?RDiscount 출력에 nofollow 링크를 생성합니다.

감사합니다.

답변

3

이것은 확장 구문을 가진 루비 Markdown 파서 인 Kramdown에서만 가능하다고 생각합니다. 다시 구문 분석 RDiscount 출력에 의해, 나는이 해킹을 사용하고 그 동안

[link](test.html){:rel='nofollow'} 
+0

실제로 콘텐츠는 사용자가 제공하므로 SEO 스팸을 차단하는 수단으로 모든 링크에 rel = "nofollow"를 자동으로 추가해야합니다. stackoverflow 그것을 않습니다 생각합니다. – widgetycrank

+0

그래도 고마워. – widgetycrank

2

각 앵커에 확인해 = "따르지"를 추가 : 당신은 링크에서와 같이 그 짓을 했을까

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 

나는 이것이 정말로 markdown 파서에 의해 처리되어야한다고 생각하지만.

1

비슷한 작업을 수행하려면 모든 링크에 target="_new"을 추가하십시오. Kramdown 및 사용자 정의 Kramdown::Converter::Html 클래스를 사용하여 해결했습니다.

내가 또한 응용 프로그램/도우미 이상적/application_helper.rb

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

을에서보기 도우미가

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

(일부 자동로드 경로에 kramdown/변환/my_html.rb)를 Kramdown::Converter::Html 서브 클래스를 정의 Kramdown::Document.new(str).to_my_html.html_safe을 사용할 수 있어야하지만 Kramdown이 const_defined?을 사용하여 변환기가 사용 가능하고 오토로더를 트리거하지 않는지 확인하기 위해 레일스 개발 모드에서 작동하도록 할 수는 없습니다. 이 문제를 해결하는 방법을 알고 있다면 의견을 보내주십시오.

0

이 방식으로 링크 수정을 지원하는 RDiscount에 feature request이 열려 있습니다.

곧 출시 될 RDiscount 2.1.5.x 릴리즈 중 하나가 예정되어 있습니다.