html - '&'를 '& amp;'로 인코딩해야합니까?




validation html5 utf-8 character-encoding (15)

내 사이트의 <title> 에 HTML5 및 UTF-8과 함께 ' & '기호를 사용하고 있습니다. Google은 제목에있는 모든 브라우저와 마찬가지로 SERP에 앰퍼샌드 벌금을 표시합니다.

http://validator.w3.org/ 에서이 사실을 알려줍니다.

& 문자 참조를 시작하지 않았습니다. (& &amp; 로 이스케이프 처리했을 것입니다.)

나는 정말로 &amp; ?

저는 유효성 검사를 위해 유효성을 검증 한 내 페이지에 대해 소란스럽지 않지만, 사람들의 의견을 듣고, 중요하고 왜 그런지 궁금합니다.


Answers

사용자가 그것을 사용자에게 전달하거나 URL에 포함되면 사용자는이를 이스케이프해야합니다.

페이지의 정적 텍스트에 나타나는 경우? 모든 브라우저는이 방법 중 하나를 올바르게 수행 할 것이므로 걱정하지 않아도됩니다.


유효성을 제외하고 사실은 특정 문자 인코딩이 HTML 문서에 중요하므로 웹 페이지로 적절하고 안전하게 렌더링 할 수 있습니다.

인코딩 &&amp; 모든 상황에서 저에게있어서, 오류와 실패의 가능성을 줄이기위한보다 쉬운 규칙입니다.

다음을 비교하십시오 : 어느 것이 더 쉬우십니까? 누가 더 벅찬 걸까요?

방법론 1

  1. 앰퍼샌드 문자가 포함 된 일부 내용을 작성하십시오.
  2. 그들 모두를 인코딩하십시오.

방법론 2

(소금 한 알을 얹어주세요.))

  1. 앰퍼샌드 문자가 포함 된 일부 내용을 작성하십시오.
  2. 경우에 따라 각 앰퍼샌드를 확인하십시오. 다음 사항을 확인하십시오.
    • 그것은 분리되어 있으며 명확하게 앰퍼샌드와 같은 것입니다. 예. volt & amp
      >이 경우 인코딩을 신경 쓰지 마십시오.
    • 그것은 격리되어 있지 않지만 엔티티 목록이 진화 할 수 없기 때문에 결과 엔티티가 존재하지 않으며 존재하지 않으므로 모호하지 않습니다. 예 : amp&volt
      >이 경우 인코딩을 신경 쓰지 마십시오.
    • 그것은 고립되지 않고 애매합니다. 예. volt&amp
      > 인코딩하십시오.

??


이미지 URL의 이스케이프가 필요한 이유를 확인한 후 https://validator.w3.org 에서 시도했습니다. 설명은 꽤 좋다. 그것은 심지어 URL을 이스케이프해야한다는 것을 강조합니다. [추신 : URL의 필요성에 따라 소비 될 때 이스케이프 처리되지는 않을 것이라고 생각합니다. 아무도 명확하게 할 수 있습니까?]

<img alt="" src="foo?bar=qut&qux=fop" />

엔티티 참조가 문서에서 발견되었지만 정의 된 해당 이름으로 참조가 없습니다. 흔히 참조 이름, 인코딩되지 않은 앰퍼샌드의 철자를 잘못 입력하거나 후행 세미콜론 (;)을 사용하지 않아 발생합니다. 이 오류의 가장 일반적인 원인은 URL의 앰퍼샌드에있는 WDG에서 설명한 URL의 인코딩되지 않은 앰퍼샌드입니다. 엔티티 참조는 앰퍼샌드 (&)로 시작하고 세미콜론 (;)으로 끝납니다. 문서에서 리터럴 앰퍼샌드를 사용하려면 "&"(URL 내부에서도!)로 인코딩해야합니다. 엔티티 참조를 세미콜론으로 끝내십시오. 그렇지 않으면 엔티티 참조가 다음 텍스트와 관련하여 해석 될 수 있습니다. 또한 명명 된 엔티티 참조는 대소 문자를 구별합니다. & Aelig; æ는 다른 문자입니다. PHP 세션 처리 코드에서 생성 된 일부 마크 업에이 오류가 나타나면이 기사는 문제에 대한 설명과 해결책을 제공합니다.


가능하다면 유효한 코드를 제공해야합니다.

대부분의 브라우저는 자동으로이 오류를 수정하지만 브라우저의 오류 처리에 의존하는 데는 문제가 있습니다. 잘못된 코드를 처리하는 방법에 대한 표준은 없으므로 각각의 브라우저 공급 업체가 각 오류를 처리하는 방법을 결정해야하며 결과는 다를 수 있습니다.

브라우저가 다르게 반응 할 가능성이있는 몇 가지 예는 요소를 표 안에 넣고 표 셀 외부에 놓거나 서로 내부에 링크를 중첩하는 경우입니다.

특정 예를 들어 문제가 발생하지는 않지만 브라우저에서 오류를 수정하면 브라우저가 표준 준수 모드에서 완전 모드로 변경되어 레이아웃이 완전히 무너질 수 있습니다.

따라서 코드에서 이와 같은 오류를 수정해야합니다. 그렇지 않은 경우 유효성 검사기의 오류 목록을 짧게 유지해야하므로 더 심각한 문제를 발견 할 수 있습니다.


당신의 title 실제로 무엇인지를 보여줄 수 있습니까? 제출할 때

<!DOCTYPE html>
<html>
<title>Dolce & Gabbana</title>
<body>
<p>am i allowed loose & mpersands?</p>
</body>
</html>

http://validator.w3.org/ - 실험적 HTML 5 모드를 사용하도록 명시 적으로 요청합니다. - & s에 대한 불만이 없습니다 ...


몇 년 전에 우리는 웹 애플리케이션 중 하나가 Firefox에서 올바르게 표시되지 않는다는보고를 받았습니다. 페이지에 보이는 태그가 포함되어있는 것으로 나타났습니다.

<div style="..." ... style="...">

반복되는 스타일 속성에 직면했을 때 IE는 두 스타일을 모두 결합하지만 Firefox는 그 중 하나만 사용하므로 다른 동작을 사용합니다. 태그를 다음으로 변경했습니다.

<div style="...; ..." ...>

그리고 확실히, 그것은 문제를 해결했습니다! 이야기의 도덕적 인 이유는 브라우저가 유효하지 않은 HTML보다 유효한 HTML을보다 일관되게 처리한다는 점입니다. 그럼 이미 마크 업을 고쳐주세요! (또는 HTML Tidy를 사용하여 수정하십시오.)


& 근처에서 끝나는 세미콜론의 가능성에 달렸습니다.

예를 들어, 사용자로부터 입력을 처리 할 때 (예를 들어, 제목 태그에 포럼 게시물의 사용자 제공 주제를 포함하는 경우) 임의의 세미콜론을 어디에 둘 것인지 알 수 없으며, 이상한 항목이 무작위로 표시 될 수 있습니다. 그래서 항상 그 상황에서 벗어나십시오.

자신의 정적 HTML에 대해서는 확실히 건너 뛸 수 있지만 적절한 이탈을 포함하는 것은 매우 사소한 일이므로이를 피할 이유가 없습니다.


& HTML 에서 사용되면 & escape해야합니다.

& 가 자바 스크립트 문자열 (예 : alert('This & that'); 또는 document.href를 사용하지 않아도됩니다.

document.write를 사용하는 경우 document.write(<p>this &amp; that</p>) 예 : document.write(<p>this &amp; that</p>) 사용해야합니다 document.write(<p>this &amp; that</p>)


나는 이것이 "브라우저가 상관하지 않을 때 왜 스펙을 따르는가"에 대한 질문으로 바뀌 었다고 생각한다. 여기 내 일반적인 답변입니다 :

표준은 현재의 것이 아닙니다. 그들은 미래의 일입니다. 개발자로서 웹 표준을 따르는 경우 브라우저 공급 업체가 이러한 표준을 올바르게 구현할 가능성이 높아지고 CSS 해킹, 기능 감지 및 브라우저 검색이 필요없는 완전히 상호 운용 가능한 웹에 더 가까워집니다. 우리가 왜 레이아웃이 특정 브라우저에서 깨지는 지 또는 그 문제를 해결하는 방법을 알 필요가없는 곳.

특히 HTML5에서 & amp; 특정 상황에서 HTML5 문서 형식을 사용하고 있으며 사용자가 HTML5 호환 브라우저를 사용하기를 기대한다면 그렇게 할 이유가 없습니다.


HTML에서 &문자 참조 또는 엔터티 참조 중 하나 인 참조의 시작을 표시합니다. 파서의 해당 지점에서 문자 참조 또는 엔티티 참조를 나타내는 엔티티 이름을 나타내는 # 가 있고 그 뒤에 모두 a가옵니다 ; . 그것은 정상적인 행동입니다.

그러나 참조 이름 또는 참조 열기 다음에 공백이나 " , ' , < , > , & ,와 같은 다른 구분 기호가 오는 경우 일반 & 를 나타내는 참조조차 생략 될 수 있습니다.

<p title="&amp;">foo &amp; bar</p>
<p title="&amp">foo &amp bar</p>
<p title="&">foo & bar</p>

이 경우에만 결말 ; 또는 심지어 참조 자체는 (적어도 HTML 4에서는) 생략 될 수있다. 나는 HTML 5가 결말을 필요로한다고 생각한다 ; .

그러나 사양에서는 문자 참조 &#38; 같은 참조를 항상 사용하도록 권장 합니다 &#38; 또는 엔티티 참조 &amp; 혼동을 피하기 위해 :

작성자는 문자 참조 (엔터티 참조 열기 구분 기호)의 시작과 혼동하지 않으려면 " & "대신 " &amp; "(ASCII 십진수 38)를 사용해야합니다. 저자는 문자 참조가 CDATA 속성 값 내에서 허용되기 때문에 속성 값에 " &amp; "를 사용해야합니다.


나는 이것을 철저히 조사하고 나의 발견에 대해 다음과 같이 쓴다. mathiasbynens.be/notes/ambiguous-ampersands

또한 불필요한 앰퍼샌드 또는 세미콜론으로 끝나지 않는 문자 참조에 대한 태그를 확인하는 데 사용할 수 있는 온라인 도구 를 만들었습니다. HTML 유효성 검사기가 현재 올바르게 작동하지 않습니다.


글쎄, 그것은 사용자 입력에서 온다면 절대적으로 그렇습니다. 분명한 이유가 있습니다. 이 웹 사이트가 그렇게하지 않는다면 생각해보십시오.이 질문의 제목은 '&'를 '&'로 인코딩해야 할 필요가있는 것처럼 보일 것입니다 .

그것은 echo '<title>Dolce & Gabbana</title>'; 와 같은 것일뿐입니다 echo '<title>Dolce & Gabbana</title>'; 엄밀히 말하면 당신은 할 필요가 없습니다. 그것은 더 좋을 것이나, 만약 당신이 아무도 그 차이를 알 수 없을 것입니다.


링크에는 언제 & 왜 탈출해야하는지 &amp;

https://jsfiddle.net/vh2h7usk/1/

흥미롭게도, 나는 대답을 올바르게 표현하기 위해 성격을 벗어나야 만했다. 기본 제공 코드 샘플 옵션 (대답 패널에서)을 사용하려면 &amp; 그것이해야하는 것처럼 나타납니다. 하지만 수동으로 <code></code> 요소를 사용한다면 제대로 표현하기 위해 탈출해야합니다. :)


정적 텍스트에 대해 실제로 말하면

<title>Foo & Bar</title>

하드 디스크의 일부 파일에 저장되어 서버에서 직접 서비스 한 다음 예 : 이스케이프 할 필요가 없습니다.

그러나 요즘에는 완전히 정적 인 HTML 컨텐트가 거의 없으므로 HTML 컨텐트가 다른 소스 (데이터베이스 컨텐트, 사용자 입력, 웹 서비스 호출 결과, 레거시 API 결과 등)에서 생성되었다고 가정하는 다음 면책 조항을 추가 할 것입니다. ..) :

간단한 & 탈출하지 않으면 &amp; 또는 &nbsp; 또는 <b> 또는 <script src="http://attacker.com/evil.js"> 또는 기타 잘못된 텍스트. 즉, 콘텐츠를 잘못 표시하는 것이 좋으며 XSS 공격 이 의심 스러울 수 있습니다.

다른 말로하면, 이미 문제가있는 다른 사례를 확인하고 벗어날 때, 완전히 부러지기는하지만 여전히 다소 어색한 독립형 & 이스케이프 처리되지 않은 상태를 벗어날 이유가 거의 없습니다.






html validation html5 utf-8 character-encoding