Programming

Ruby on Rails : 문자열을 HTML로 렌더링하는 방법?

procodes 2020. 6. 12. 22:58
반응형

Ruby on Rails : 문자열을 HTML로 렌더링하는 방법?


나는 가지고있다

@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>

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


@str = "<span class=\"classname\">hello</span>" 내 견해로는

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

해결 방법 : 백 슬래시로 이스케이프되지 않도록 작은 따옴표 안에 큰 따옴표를 사용하십시오.

@str = '<span class="classname">hello</span>'
<%raw @str %>

html_safe 버전은 Rails 4에서 잘 작동합니다 ...

<%= "<center style=\"color: green; font-size: 1.1em\" > Administrators only </center>".html_safe if current_user.admin? %
>

참고URL : https://stackoverflow.com/questions/4576932/ruby-on-rails-how-to-render-a-string-as-html

반응형