2014-12-03 4 views
2

는이 코드가 있습니다Nokogiri 인코딩 href 콘텐츠를 피하는 방법?

n = Nokogiri::HTML::DocumentFragment.parse("<a href='{{var_name}}'>click</a>") 

을 내가 n.to_html을 수행 할 때, 나는 {{ }} 탈출 얻을 : 나는 그것을 피하려고

"<a href=\"%7B%7Bvar_name%7D%7D\">click</a>" 

, 나는 템플릿 엔진을 구문 분석 할 필요가 있기 때문이다.

Nokogiri가 "href"콘텐츠를 인코딩하지 않도록하려면 어떻게해야합니까?

답변

5

Nokogiri에게 이 아니라고 말할 수 없다고 생각합니다. HTML의 매개 변수 안에 텍스트 값을 인코딩합니다. 이 규칙에 따라 파서, 그러나 그것은 우리의 출력을 받아 들여야 의미하지 않는다 : 크게

XHTML 또는 XML 출력이 허용되는 경우
require 'nokogiri' 

REGEX_HASH = { 
    '%7B' => '{', 
    '%7D' => '}' 
} 

REGEX = /(?:#{ Regexp.union(REGEX_HASH.keys).source })/ 
# => /(?:%7B|%7D)/ 

doc = Nokogiri::HTML::DocumentFragment.parse("<a href='{{var_name}}'>click</a>") 
doc.to_html 
# => "<a href=\"%7B%7Bvar_name%7D%7D\">click</a>" 

fixed_html = doc.to_html.gsub(REGEX, REGEX_HASH) 
# => "<a href=\"{{var_name}}\">click</a>" 

그러나, 당신은 간단하게 할 수 일 :

doc = Nokogiri::HTML::DocumentFragment.parse("<a href='{{var_name}}'>click</a>") 
doc.to_html # => "<a href=\"%7B%7Bvar_name%7D%7D\">click</a>" 
doc.to_xhtml # => "<a href=\"{{var_name}}\">click</a>" 
doc.to_xml # => "<a href=\"{{var_name}}\">click</a>" 
관련 문제