source

루비 온 레일즈: 어떻게 문자열을 HTML로 렌더링합니까?

ittop 2023. 6. 1. 22:58
반응형

루비 온 레일즈: 어떻게 문자열을 HTML로 렌더링합니까?

있습니다

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

그리고 내 생각에는:

<%= @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 @str %>

Rails는 사용자의 문자열에 악성 코드가 포함되어 있을 수 있기 때문에 보안 조치로 해당 문자열에서 빠져나가고 있습니다.하지만 레일즈에게 당신의 끈이html_safe바로 통과할 겁니다

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

OR

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

사용.raw잘 작동하지만 문자열을 문자열로 변환한 다음 호출하는 것뿐입니다.html_safe내게 줄이 있다는 것을 알았을 때, 나는 전화하는 것을 선호합니다.html_safe직접적으로, 그것은 불필요한 단계를 건너뛰고 무슨 일이 일어나고 있는지 명확하게 하기 때문입니다.문자열 이스케이프 및 XSS 보호에 대한 자세한 내용은 이 Asicast에 있습니다.

원시 사용:

<%=raw @str >

그러나 @jmort253이 정확하게 말한 것처럼 HTML이 실제로 어디에 속하는지 생각해 보십시오.

사용 중인 경우railsErubis를 활용하는 것 - 그것을 하는 것입니다.

<%== @str >

이중 등호를 기록합니다.자세한 내용은 SO에 대한 관련 질문을 참조하십시오.

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

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

이렇게 하면 HTML이 속한 HTML 페이지에 모든 HTML을 보관할 수 있어 웹 디자이너가 나중에 서버 사이드 코드를 거치지 않고 HTML을 수정할 수 있습니다.

또는 JavaScript를 사용하지 않으려는 경우 다음을 시도할 수 있습니다.

@str = "Hi"

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

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

아니면 CGI.unscape.HTML 메서드입니다.

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

당신이 번역하고, 사람의 형편없는 코드 파일에서 원하는 코드를 선택하고 있기 때문에, 당신의 정규식 파일과 함께 content_tag를 사용할 수 있습니까?

문서에서 훔쳐서,이된 코드를 로 보간할 수 있습니다.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

반응형