2008-12-18 2 views
18

CGI.escapeHTML은 매우 나쁘지 만 CGI.unescapeHTML은 완전히 골랐다. 예를 들어 :Ruby 용 CGI보다 나은 HTML 이스케이프 및 언 이스케이프 도구가 있습니까?

require 'cgi' 

CGI.unescapeHTML('…') 
# => "…"     # correct - an ellipsis 

CGI.unescapeHTML('…') 
# => "…"    # should be "…" 

CGI.unescapeHTML('¢') 
# => "\242"     # correct - a cent 

CGI.unescapeHTML('¢') 
# => "¢"    # should be "\242" 

CGI.escapeHTML("…") 
# => "…"     # should be "…" 

unescapeHTML에 대한 모든 숫자 코드의 플러스 &, <, >"을 알고있는 것으로 보인다. 그리고 escapeHTML은 마지막 4 개에 대해서만 알고 있습니다. 숫자 코드를 전혀 사용하지 않습니다. 나는 HTML이 CGI.escapeHTML이 알고있는 대부분의 문자의 문자 버전을 허용하기 때문에 탈출은 일반적으로 강력 할 필요가 없다는 것을 이해한다. 하지만 이스케이프 처리는 실제로 개선되어야합니다.

최소한 이스케이프 처리에는 더 나은 도구가 있습니까?

+0

그것도 —을 처리하지 않습니다. – Chloe

답변

26

를 htmlentities 보석 트릭을 수행해야합니다

require 'rubygems' 
require 'htmlentities' 

coder = HTMLEntities.new 

coder.decode('…') # => "…" 
coder.decode('…') # => "…" 
coder.decode('¢') # => "¢" 
coder.decode('¢') # => "¢" 
coder.encode("…", :named) # => "…" 
coder.encode("…", :decimal) # => "…" 
2
require 'rubygems' 
require 'hpricot' 

Hpricot('…', :xhtml_strict => true).to_plain_text 

문자 인코딩을해야 할 수도 있습니다.

+5

hpricot이 아닌 htmlentities gem을 사용하십시오. –

관련 문제