루비 온 레일즈: 어떻게 문자열을 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이 실제로 어디에 속하는지 생각해 보십시오.
사용 중인 경우rails
Erubis를 활용하는 것 - 그것을 하는 것입니다.
<%== @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 "<p>This is a Paragraph.</p>"
=> "<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
'source' 카테고리의 다른 글
Android Studio에서 "R 기호를 확인할 수 없음" (0) | 2023.06.01 |
---|---|
ssh: 호스트 github.com 에 연결 포트 22: 연결 시간 초과 (0) | 2023.06.01 |
문자열을 정규식 루비로 변환 (0) | 2023.06.01 |
Postgres 데이터베이스의 모든 테이블 잘라내기 (0) | 2023.06.01 |
UI 테이블 뷰의 선택된 인덱스 가져오기 (0) | 2023.06.01 |