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



7 Answers

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

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

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

방법론 1

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

방법론 2

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

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

??

Question

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

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

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

나는 정말로 &amp; ?

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




이게 누구에게나 유용 할 지 모르겠다 ... 나는 잠시 동안 이걸 싸우고 있었다. 여기 당신이 모든 링크, 자바 스크립트, 컨텐트를 고치는 데 사용할 수있는 영광스러운 정규식이다. 아무도 수정하기를 원하지 않는 많은 유산 콘텐츠를 처리해야했습니다.

마스터 페이지 나 컨트롤에서 렌더 오버라이드에 다음을 추가합니다.

이것을 틀린 장소에 넣으 려하지 말아주세요.

// remove the & from href="blaw?a=b&b=c" and replace with &amp; 
//in urls - this corrects any unencoded & not just those in URL's
// this match will also ignore any matches it finds within <script> blocks AND
// it will also ignore the matches where the link includes a javascript command like
// <a href="javascript:alert{'& & &'}">blaw</a>
html = Regex.Replace(html, "&(?!(?<=(?<outerquote>[\"'])javascript:(?>(?!\\k<outerquote>|[>]).)*)\\k<outerquote>?)(?!(?:[a-zA-Z][a-zA-Z0-9]*|#\\d+);)(?!(?>(?:(?!<script|\\/script>).)*)\\/script>)", "&amp;", RegexOptions.Singleline | RegexOptions.IgnoreCase);



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

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

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

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

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




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

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




HTML5 규칙은 HTML4와 다릅니다. 앰퍼샌드가 매개 변수 이름을 시작하는 것처럼 보이지 않는 한 HTML5에는 필요하지 않습니다. "& copy = 2"는 여전히 문제가됩니다. 예를 들어, & copy; 저작권 기호입니다.

그러나 다음 텍스트에 따라 인코딩하거나 인코딩하지 않기로 결정하는 것이 더 힘든 작업입니다. 따라서 가장 쉬운 경로는 항상 모든 시간을 인코딩하는 것입니다.




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

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




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

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

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




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

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

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




Related