답변:
레일 3 고려 :
html_safe
실제로 "문자열을 HTML 안전"으로 설정합니다 (이보다 조금 더 복잡하지만 기본적으로 그렇습니다). 이런 식으로 도우미 나 모델에서 HTML Safe 문자열을 마음대로 반환 할 수 있습니다.
h
헬퍼가 제공하므로 컨트롤러 또는 뷰 내에서만 사용할 수 있습니다. 출력을 강제로 이스케이프합니다. 실제로 더 이상 사용되지는 않지만 더 이상 사용하지 않을 것입니다. 유일한 사용법은 html_safe
선언 을 "되돌아가는 것" 입니다.
식 앞에 접두사를 붙인 raw
것은 실제로 to_s
체인으로 연결된 호출과 동일 html_safe
하지만, 같은 도우미에 선언 h
되므로 컨트롤러 및 뷰에서만 사용할 수 있습니다.
" SafeBuffers and Rails 3.0 "은 SafeBuffer
s ( html_safe
매직 을 수행하는 클래스 )의 작동 방식에 대한 좋은 설명입니다 .
h
더 이상 사용되지 않을 것이라고 말하지 않을 것입니다 . 사용 "Hi<br/>#{h@ user.name}".html_safe
은 매우 일반적이며 사용 이 허용됩니다.
raw
그리고 html_safe
실제로 는 미묘한 차이가 있습니다 : raw(nil)
빈 문자열을 반환 nil.html_safe
하고 예외 를 throw합니다.
h
html_safe 선언을 "복귀"하지 않습니다. 문자열이 html_safe
인 h
경우 아무것도하지 않습니다.
반복되는 것으로 생각 합니다. 문자열을 HTML 이스케이프 html_safe
하지 않습니다 . 실제로 문자열이 이스케이프되는 것을 방지합니다.
<%= "<script>alert('Hello!')</script>" %>
둘 것이다:
<script>alert('Hello!')</script>
HTML 소스에 (예, 안전합니다!)
<%= "<script>alert('Hello!')</script>".html_safe %>
경고 대화 상자가 나타납니다 (원하는 것이 확실합니까?). 따라서 html_safe
사용자가 입력 한 문자열 을 호출하고 싶지 않을 것입니다 .
html_safe
그렇지 않은 것으로 표시탈출 하거나 탈출 . HTML 안전 하지 않은 것으로 표시 한 다음 ERB <% = 태그의 암시 적 이스케이프 처리를 사용 하는 최종 결과는 데이터를 이스케이프 해제 한 다음 출력에서 다시 이스케이프 처리하는 것과 동일 할 수 있지만 기능적으로는 수행하지 않습니다. 6 대 (6 * -1 * -1)의 차이와 같은 종류.
차이점은 Rails ' html_safe()
와 raw()
입니다. Yehuda Katz의 훌륭한 게시물이 있으며 실제로 다음과 같이 요약됩니다.
def raw(stringish)
stringish.to_s.html_safe
end
예, 입력을 String으로 강제 한 다음 호출 raw()
하는 래퍼 입니다. 또한 모듈의 도우미 인 반면 String 클래스의 메서드는 새로운 ActiveSupport :: SafeBuffer 인스턴스를 만드는 메서드입니다.html_safe()
html_safe()
raw()
html_safe()
@dirty
플래그 .
" Rails 'html_safe vs. raw "를 참조하십시오 .
html_safe
:
문자열을 신뢰할 수있는 안전으로 표시합니다. 추가 이스케이프를 수행하지 않고 HTML에 삽입됩니다.
"<a>Hello</a>".html_safe
#=> "<a>Hello</a>"
nil.html_safe
#=> NoMethodError: undefined method `html_safe' for nil:NilClass
raw
:
raw
그냥 래퍼 html_safe
입니다. raw
문자열이 될 가능성이있는 경우 사용하십시오 nil
.
raw("<a>Hello</a>")
#=> "<a>Hello</a>"
raw(nil)
#=> ""
h
에 대한 별칭 html_escape
:
HTML 태그 문자를 이스케이프 처리하는 유틸리티 메소드입니다. 안전하지 않은 내용을 피하려면이 방법을 사용하십시오.
Rails 3 이상에서는 기본적으로 사용되므로이 방법을 명시 적으로 사용할 필요가 없습니다
가장 안전한 방법은 다음과 같습니다. <%= sanitize @x %>
XSS를 피할 것입니다!
Simple Rails 용어로 :
h
렌더링으로 인해 HTML이 손상되지 않도록 HTML 태그를 숫자 문자로 제거
html_safe
문자열이 html 저장으로 간주되도록 문자열에 부울을 설정합니다.
raw
html_safe를 문자열로 변환합니다.
h
is html_safe
는 HTML이있는 그대로 렌더링됨을 의미합니다.
<%== @x %>
대한 별칭이 있다고 언급했습니다.<%= raw(@x) %>