2011-01-17 5 views
1

나는이 새로운 뷰 엔진을 좋아하고 가장 멋진 기능 중 하나는 모든 것이 기본적으로 인코딩된다는 것입니다. 하지만 난 이해할 수없는 뭔가가, 은 우리가 내가 내가 올바른면도기 XHTML "&"문자 인코딩 버그

<p> 
    this is a test Paragraph for both Development &amp; Production 
</p> 

을 얻을 불을 지르고에서 요소를 검사하면 내가 지금이 HTML 단락

<p> 
     this is a test Paragraph for both Development & Production 
</p> 

을 만든 가정 해 봅시다하지만 난 볼 경우 내가

<p> 
    this is a test Paragraph for both Development & Production 
</p> 

를 얻을 브라우저 에서 소스 코드와 나는 W3C 유효성 검사 페이지를 확인하려고 내가 & "의 오류 "문자는 유효하지 않습니다. 내가 바로

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11  /DTD/xhtml11.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 

내가 무엇을 놓치고 설정 생각으로

지금 내 문서는 무엇입니까?

+4

다소 부정확 한 것으로 보아 "모든 것이 기본적으로 인코딩 됨"이라는 주장을 확인하는 것으로 시작합니다. – Pointy

+0

그리고 클레임을 수정 한 후, 나는 실제로 클라이언트에게 렌더링되는 것을 결정하는 정확한 방법을 찾았으므로 추측 할 필요가 없습니다. 컬 (Curl)과 피 들러 (Fiddler)가 떠오른다. – bzlm

+0

@Pointy 그 주장은 어떻게 부정확합니까? – marcind

답변

11

기본적으로 면도기는 페이지의 모든 내용이 아닌 모든 내용을 인코딩합니다. Razor의 P 태그 안의 텍스트는 HTML이기 때문에 인코딩을하지 않습니다.

차이의 더 나은 이해를 위해 다음의 예를 살펴 보자 : 당신이, 당신이 첫 번째 단락이 인코딩되지 않는 것을 알 수 있습니다이 페이지를 렌더링하는 경우

<p>this is a test Paragraph for both Development & Production</p> 

@{var body = "this is a test Paragraph for both Development & Production";} 
<p>@body</p> 

@{var body2 = new HtmlString("this is a test Paragraph for both Development & Production");} 
<p>@body2</p> 

하는 두 번째 단락은 얻을 것이다 반면 변수의 출력을 인코딩 할 때 인코딩됩니다. 그런 다음 세 번째 예제는 입력이 안전하다고 가정하는 특수 HtmlString을 사용하므로 첫 번째 예제와 동일한 출력을 생성합니다.

<p>this is a test Paragraph for both Development & Production</p> 
<p>this is a test Paragraph for both Development &amp; Production</p> 
<p>this is a test Paragraph for both Development & Production</p> 
+0

감사하지만 거기에 기본적으로 페이지에서 모든 것을 인코딩하는 방법입니다 @ 블록 또는 일반 P 또는 HTML 요소 블록 무엇입니까? – DevMania

+1

아니요, Razor는 HTML을 확장 한 매우 간단한 뷰 엔진으로 설계되었습니다. 즉 유효한 HTML이 아직 작성되어야합니다.유효하지 않은 HTML을 작성하도록 요구하는 경우가있을 경우 간단한 CMS 유형 기능을 구축하거나 체크인하기 전에 HTML 유효성 검사기를 실행해야합니다. –

+0

팁을 주셔서 감사합니다 – DevMania

3

면도기는 @ 블록에서 출력을 탈출합니다 : 참고로

, 여기에 면도기의 출력이다.

리터럴 마크 업을 직접 이스케이프 처리해야합니다.
브라우저가 유효하지 않은 태그를 올바르게 해석 할만큼 똑똑하기 때문에 방화범이 표시되는 내용은 &amp;입니다.

+0

작은 정보를 보내 주셔서 감사합니다 :) – DevMania

-1

Firebug는 뷰어에 표시 할 때 자동으로 HTML을 인코딩합니다. 이것은 오도 된 것입니다. 소스보기는 사이트에서 실제로 출력 한 것을 보여줍니다.

+2

그건 사실이 아닙니다. 브라우저가 자동으로 잘못된 마크 업을 수정합니다. 방화 광이 단순히 DOM을 울리고 있습니다. – SLaks