2011-04-27 5 views
3

사용 레일 3.0.6, 나는 내가 content_for(:food_name)를 사용하여 돌아올 때 나는 그런 다음Ruby on Rails의 content_for가 자동으로 HTML을 이스케이프 처리합니까?

content_for :food_name, "Macaroni & Cheese" 

을 할 경우보기에서 다음 & 이미 &로 할 것이라는 점을 발견했다. content_for(:food_name).html_safe을 입력해도 상관 없습니다. &은 여전히 ​​&입니다. 다음과 같은 방법을 수행하는 경우

는하지만, 이스케이프되지 않은 :이 경우

content_for :food_name, "Macaroni & Cheese".html_safe 

에서, & 자동 &amp;으로 변경되지 않습니다. 지금, 나는 실제로 #{h content_for(:food_name)}을 장소가 있기 때문에 두 번 (&amp;amp;가 될) 이스케이프, 아니면 내가 <meta> 설명에 값을 가지고 있기 때문에 , 그것을 호출하지 일부 값에 h를 호출하는 이상한 것 다른 값의 경우. 자동으로 탈출, 그리고 내가 그것의 끝에 " - come see us!"를 추가, 지금 다음, 그것을 탈출 레일 3에 의존하는 경우 & 두 번 이스케이프 경우

또한, 하나의 큰 캐치 이다. content_for 문서에서

: 나는 그런 어떤 설명을 볼 수 없습니다

http://api.rubyonrails.org/classes/ActionView/Helpers/CaptureHelper.html#method-i-content_for

. 위의 설명이 올바른지 이거나 더 정확한 문서입니까? 사실 자동 HTML 탈출구가 없습니다.

그것은 capture 호출 content_for 위의 웹 페이지 소스 코드에서처럼 보인다, 그것은, 그래서 실제로 자동 탈출 ERB::Util.html_escape이 없지만, 정말이 있어야하고, 그 이유는 무엇입니까? capture가 자동으로 탈출을한다는 문서에 포함되지 않았습니까? 아닙니다.

+0

단순한 값 (메타 태그의 값과 같은)을 저장하기위한 편의상, 나는 종종 인스턴스 변수를 대신 사용합니다. 'content_for'는 html 조각을 염두에두고 디자인 된 것 같습니다. – lulalala

답변

2

레일스가 이러한 문자를 이스케이프하지 않게하려면 <%= raw some_stuff %>을 사용하십시오. 그렇지 않으면 간단한 호출을 사용하십시오.

콘텐츠가있을 수있는 영역을 항상 알고 있으며 이스케이프 처리되는 경우 수정할 수 있으므로 해당 위치에 raw으로 간단하게 맞출 수 있습니다.

자세한 내용은 Yehuda katz의이 훌륭한 기사를 참조하십시오.
safebuffers-and-rails-3-0

+1

다른 정보가 있지만, 나는 'content_for'의 행동에 대해 약간의 아이디어를 얻기를 희망했다. –