2011-05-12 4 views
0

Sanitize gem을 사용하여 일부 HTML을 정리하고 있습니다. 내 앵커 태그의 href 속성에서, 나는 다음과 같은 구문 분석 할 :Sanitize gem이 href 속성의 콜론을 좋아하지 않습니다.

<a href="#fn:1">1</a>

이것은 footnotes using the Kramdown gem을 구현하기 위해 필요합니다.

그러나 Sanitize는 href 속성 내에 콜론을 좋아하는 것으로 보이지 않습니다. 대신 단순히 href 속성을 건너 뛰어 <a>1</a>을 출력합니다.

내 살균 코드는 다음과 같습니다 살균이 href 속성에서 콜론을 받아 얻을 수있는 방법이

# Setup whitelist of html elements, attributes, and protocols that are allowed. 
allowed_elements = ['h2', 'a', 'img', 'p', 'ul', 'ol', 'li', 'strong', 'em', 'cite', 
    'blockquote', 'code', 'pre', 'dl', 'dt', 'dd', 'br', 'hr', 'sup', 'div'] 
allowed_attributes = {'a' => ['href', 'rel', 'rev'], 'img' => ['src', 'alt'], 
    'sup' => ['id'], 'div' => ['class'], 'li' => ['id']} 
allowed_protocols = {'a' => {'href' => ['http', 'https', 'mailto', :relative]}} 

# Clean text of any unwanted html tags. 
html = Sanitize.clean(html, :elements => allowed_elements, :attributes => allowed_attributes, 
    :protocols => allowed_protocols) 

있습니까?

답변

3

이것은 기본적으로 가장 안전한 작업을 수행하는 Sanitize입니다. URL이 : 이전의 부분이 프로토콜 (또는 RFC 1738 용어의 스키마)이고 #fn이 프로토콜 허용 목록에 없기 때문에 전체 href 특성이 제거 된 것으로 가정합니다.

당신은 프로토콜 화이트리스트에 #fn를 추가하여이 같은 URL을 허용 할 수 있습니다 :

allowed_protocols = {'a' => {'href' => ['#fn', 'http', 'https', 'mailto', :relative]}} 
+2

누구든지이을을 downvoted : 라이언 살균을 _wrote_ 사람입니다. 누구든지 옳은 대답을 알고 있다면 아마 그 사람 일 것입니다. –

+0

위대한 일을했습니다. 고마워요! 이 솔루션을 구현하는 다른 모든 사람들에게 머리를 가리 키기 위해 각주까지 링크 된 각주 참조에'#fnref ''를 추가해야합니다. 예 : 'allowed_protocols = { 'a'=> { 'href'=> [ '#fn', '#fnref', 'http', 'https', 'mailto' –

관련 문제