문자열을 인코딩/탈출하는 방법은 무엇입니까? 내장이 있습니까?
-
22-08-2019 - |
문제
HTML 페이지에 텍스트로 표시하고 싶은 신뢰할 수없는 문자열이 있습니다. 나는 숯을 피해야한다 '<
' 그리고 '&
'HTML 엔티티로서. 소란이 적을수록 좋습니다.
나는 UTF8을 사용하고 있으며 악센트 된 편지를 위해 다른 엔티티가 필요하지 않습니다.
루비 나 레일에 내장 기능이 있습니까, 아니면 내 자신을 굴려야합니까?
해결책
그만큼 h
도우미 방법 :
<%=h "<p> will be preserved" %>
다른 팁
루비 체크 아웃 CGI 수업. URL뿐만 아니라 HTML을 인코딩하고 디코딩하는 방법이 있습니다.
CGI::escapeHTML('Usage: foo "bar" <baz>')
# => "Usage: foo "bar" <baz>"
Ruby on Rails에서 3 HTML은 기본적으로 탈출됩니다.
에스코지가 아닌 문자열의 경우 사용 :
<%= raw "<p>hello world!</p>" %>
erb :: util.html_escape 어디서나 사용할 수 있습니다. 사용하지 않고 사용할 수 있습니다 require
레일에서.
대부분의 사람들이 사용하지 않기 때문에 HTML 탈출을 사용하기위한 Christopher Bradford의 답변에 추가 CGI
요즘에는 사용할 수도 있습니다 Rack
:
require 'rack/utils'
Rack::Utils.escape_html('Usage: foo "bar" <baz>')
당신은 둘 중 하나를 사용할 수 있습니다 h()
또는 html_escape()
, 그러나 대부분의 사람들은 사용합니다 h()
컨벤션에 의해. h()
짧습니다 html_escape()
레일에서.
컨트롤러에서 :
@stuff = "<b>Hello World!</b>"
당신의 견해로 :
<%=h @stuff %>
HTML 소스를 보면 실제로 데이터를 굵게 표시하지 않고 출력이 표시됩니다. 즉, 코딩됩니다 <b>Hello World!</b>
.
표시가 표시됩니다 <b>Hello World!</b>
다른 방법의 비교 :
> CGI::escapeHTML("quote ' double quotes \"")
=> "quote ' double quotes ""
> Rack::Utils.escape_html("quote ' double quotes \"")
=> "quote ' double quotes ""
> ERB::Util.html_escape("quote ' double quotes \"")
=> "quote ' double quotes ""
나는 Rails Activemailer와의 호환성을 달성하기 위해 내 자신을 썼습니다.
def escape_html(str)
CGI.escapeHTML(str).gsub("'", "'")
end
h()
인용문을 피하는 데에도 유용합니다.
예를 들어 텍스트 필드를 사용하여 링크를 생성하는보기가 있습니다. result[r].thtitle
. 텍스트에는 단일 따옴표가 포함될 수 있습니다. 내가 탈출하지 않았다면 result[r].thtitle
확인 방법에서 JavaScript가 중단됩니다.
<%= link_to_remote "#{result[r].thtitle}", :url=>{ :controller=>:resource,
:action =>:delete_resourced,
:id => result[r].id,
:th => thread,
:html =>{:title=> "<= Remove"},
:confirm => h("#{result[r].thtitle} will be removed"),
:method => :delete %>
<a href="#" onclick="if (confirm('docs: add column &apos;dummy&apos; will be removed')) { new Ajax.Request('/resource/delete_resourced/837?owner=386&th=511', {asynchronous:true, evalScripts:true, method:'delete', parameters:'authenticity_token=' + encodeURIComponent('ou812')}); }; return false;" title="<= Remove">docs: add column 'dummy'</a>
참고 : :html
타이틀 선언은 철도에 의해 마술처럼 탈출됩니다.