Ruby on Rails : 문자열을 HTML로 렌더링하는 방법? = “<b>Hi</b>” 그리고 erb

나는 가지고있다

@str = "<b>Hi</b>"

그리고 erb 관점에서 :

<%= @str %>

페이지에 표시되는 것은 : <b>Hi</b>내가 정말로 원하는 것은 Hi 입니다. 문자열을 HTML 마크 업으로 “해석”하는 루비 방법은 무엇입니까?


편집 : 경우

@str = "<span class=\"classname\">hello</span>"

내 견해로는

<%raw @str %>

HTML 소스 코드는 <span class=\"classname\">hello</span> 내가 정말로 원하는 위치입니다 <span class="classname">hello</span>(큰 따옴표를 이스케이프 처리 한 백 슬래시 없음). 큰 따옴표를 “이스케이프 제거”하는 가장 좋은 방법은 무엇입니까?



답변

최신 정보

보안상의 이유로 sanitize대신 사용 하는 것이 좋습니다 html_safe. 링크


무슨 일이 일어나고 있는지, 보안 조치로 Rails는 악성 코드가 포함되어 있기 때문에 문자열을 피하고 있습니다. 그러나 Rails에 문자열이이라고 알려 html_safe주면 바로 전달됩니다.

@str = "<b>Hi</b>".html_safe
<%= @str %>

또는

@str = "<b>Hi</b>"
<%= @str.html_safe %>

사용 raw은 잘 작동하지만 문자열을 문자열로 변환 한 다음 html_safe를 호출하면됩니다. 문자열이 있다는 것을 알면 불필요한 단계를 건너 뛰고 진행 상황을 명확하게하기 때문에 html_safe를 직접 호출하는 것이 좋습니다. 문자열 이스케이프 및 XSS 보호에 대한 자세한 내용은 이 Asciicast에 있습니다.


답변

raw 사용 :

<%=raw @str >

그러나 @ jmort253이 올바르게 말한 것처럼 HTML이 실제로 속한 곳을 고려하십시오.


답변

당신이 경우에 rails어떤 활용 Erubis을 – 그것이 할 수있는 멋진 방법을

<%== @str >

이중 등호를 유의하십시오. 자세한 내용 은 SO에 대한 관련 질문을 참조하십시오 .


답변

simple_format(@str)악성 코드를 제거 하는 을 사용할 수도 있습니다 . 여기에서 더 읽으십시오 : http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format


답변

비즈니스 로직과 컨텐츠를 혼합하고 있습니다. 대신 데이터를 페이지로 보낸 다음 JQuery와 같은 것을 사용하여 필요한 곳에 데이터를 배치하는 것이 좋습니다.

이는 웹 디자이너가 서버 측 코드를 따르지 않고 나중에 HTML을 수정할 수 있도록 모든 HTML을 HTML 페이지에 유지하는 이점이 있습니다.

또는 JavaScript를 사용하지 않으려면 다음을 시도하십시오.

@str = "Hi"

<b><%= @str ></b>

적어도이 방법으로 HTML은 HTML이 속한 HTML 페이지에 있습니다.


답변

또는 CGI.unescapeHTML 메서드를 사용해 볼 수 있습니다 .

CGI.unescapeHTML "&lt;p&gt;This is a Paragraph.&lt;/p&gt;"
=> "<p>This is a Paragraph.</p>"


답변

번역하고 사람의 엉터리 코드 파일에서 원하는 코드를 선택하기 때문에 정규 표현식과 함께 content_tag를 사용할 수 있습니까?

API 문서를 훔치면이 번역 된 코드를 다음 content_tag과 같이 보간 할 수 있습니다 .

<%= content_tag translated_tag_type.to_sym, :class => "#{translated_class}" do -%>
<%= translated_text %>
<% end -%>
# => <div class="strong">Hello world!</div>

코드를 모르는 경우 이런 종류의 사고는 번역 된 코드가 너무 호환되는지 확인합니다.