문제

HTML 페이지에 텍스트로 표시하고 싶은 신뢰할 수없는 문자열이 있습니다. 나는 숯을 피해야한다 '<' 그리고 '&'HTML 엔티티로서. 소란이 적을수록 좋습니다.

나는 UTF8을 사용하고 있으며 악센트 된 편지를 위해 다른 엔티티가 필요하지 않습니다.

루비 나 레일에 내장 기능이 있습니까, 아니면 내 자신을 굴려야합니까?

도움이 되었습니까?

해결책

그만큼 h 도우미 방법 :

<%=h "<p> will be preserved" %>

다른 팁

루비 체크 아웃 CGI 수업. URL뿐만 아니라 HTML을 인코딩하고 디코딩하는 방법이 있습니다.

CGI::escapeHTML('Usage: foo "bar" <baz>')
# => "Usage: foo &quot;bar&quot; &lt;baz&gt;"

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 소스를 보면 실제로 데이터를 굵게 표시하지 않고 출력이 표시됩니다. 즉, 코딩됩니다 &lt;b&gt;Hello World!&lt;/b&gt;.

표시가 표시됩니다 <b>Hello World!</b>

다른 방법의 비교 :

> CGI::escapeHTML("quote ' double quotes \"")
=> "quote &#39; double quotes &quot;"

> Rack::Utils.escape_html("quote ' double quotes \"")
=> "quote &#x27; double quotes &quot;"

> ERB::Util.html_escape("quote ' double quotes \"")
=> "quote &#39; double quotes &quot;"

나는 Rails Activemailer와의 호환성을 달성하기 위해 내 자신을 썼습니다.

def escape_html(str)
  CGI.escapeHTML(str).gsub("&#39;", "'")
end

h() 인용문을 피하는 데에도 유용합니다.

예를 들어 텍스트 필드를 사용하여 링크를 생성하는보기가 있습니다. result[r].thtitle. 텍스트에는 단일 따옴표가 포함될 수 있습니다. 내가 탈출하지 않았다면 result[r].thtitle 확인 방법에서 JavaScript가 중단됩니다.

&lt;%= 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 %>

&lt;a href="#" onclick="if (confirm('docs: add column &amp;apos;dummy&amp;apos; will be removed')) { new Ajax.Request('/resource/delete_resourced/837?owner=386&amp;th=511', {asynchronous:true, evalScripts:true, method:'delete', parameters:'authenticity_token=' + encodeURIComponent('ou812')}); }; return false;" title="&lt;= Remove">docs: add column 'dummy'</a>

참고 : :html 타이틀 선언은 철도에 의해 마술처럼 탈출됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top