programing tip

앰퍼샌드로 인코딩

itbloger 2020. 6. 8. 21:06
반응형

앰퍼샌드로 인코딩 합니까?


HTML을 자동으로 생성하는 코드를 작성 중이며 올바르게 인코딩하고 싶습니다.

다음 URL에 대한 링크를 생성한다고 가정 해보십시오.

http://www.google.com/search?rls=en&q=stack+overflow

모든 속성 값을 HTML로 인코딩해야한다고 가정합니다. (잘못된 경우 수정하십시오.) 따라서 위의 URL을 앵커 태그에 넣으면 앰퍼샌드를 다음 &과 같이 인코딩해야 합니다.

<a href="http://www.google.com/search?rls=en&amp;q=stack+overflow">

그 맞습니까?


그렇습니다. HTML 엔터티는 HTML 특성 내에서 구문 분석되며 길 &을 잃으면 모호성이 생깁니다. 당신은 항상 작성해야하는 이유의 &amp;대신으로 &내부의 모든 HTML 특성을가집니다.

즉 말했다 만 &따옴표가 필요로 인코딩 할 수 있습니다. é속성 과 같은 특수 문자가 있으면 HTML 파서를 만족시키기 위해 해당 문자 를 인코딩 할 필요가 없습니다.

예를 들어 URL과 같이 ASCII가 아닌 문자로 특수 처리해야하는 경우가 é있었습니다. 퍼센트 이스케이프를 사용하여 인코딩해야했으며,이 경우 %C3%A9RFC 1738에 의해 정의 되었으므로 줄 것 입니다. 그러나 RFC 1738은 RFC 3986 (URI, Uniform Resource Identifiers) 및 RFC 3987 (IRI, Internationalized Resource Identifiers) 로 대체되었으며 WhatWG는 브라우저가 ASCII가 아닌 URL을 볼 때 브라우저의 작동 방식을 정의하는 작업을 수행했습니다. HTML5 이후의 문자 . 따라서 퍼센트 인코딩 여부에 관계없이 URL에 비 ASCII 문자를 포함시키는 것이 안전합니다.


현재 공식 HTML 권장 사항에 따라 앰퍼샌드는 &amp;이 문맥에서와 같이 이스케이프되어야합니다 . 그러나 브라우저는이를 요구하지 않으며 HTML5 CR에서는이를 규칙 으로 만들 것을 제안 하므로 속성 값에 특수 규칙이 적용됩니다. 현재 HTML5 유효성 검사기는이 점에서 구식입니다 ( 댓글이있는 버그 보고서 참조 ).

속성 값에서 앰퍼샌드를 이스케이프하는 것은 가능하지만 현재 도구를 사용한 유효성 검증과는 별도로 값에서 이스케이프 할 필요가 없습니다 href(이스케이프를 시작하면 실수 할 위험이 적습니다).


예,로 변환해야 &합니다 &amp;.

W3C의이 html 유효성 검사기 도구 는 이와 같은 질문에 도움이됩니다. 특정 페이지에 대한 오류 및 경고가 표시됩니다.


zneak의 답변에 충분한 예제가 없으며 HTML 및 URI 처리가 다른 측면 및 표준으로 표시되지 않고 사소한 것들이 없기 때문에 새로운 답변을 게시하고 있습니다.

링크의 URL과 관련된 두 가지 표준이 있습니다 ( <a href).

첫 번째 표준은 RFC 1866 (HTML 2.0)입니다. 여기서 "3.2.1. 데이터 문자"에서 HTML 속성 값으로 사용될 때 이스케이프해야하는 문자를 읽을 수 있습니다. (특성 자체는 특수 문자를 전혀 허용하지 않습니다. 예를 들어 <a hr&ef="http://..., 허용되지 않거나 아닙니다 <a hr&amp;ef="http://....)

나중에 이것은 HTML 4 표준에 적용 되었으며, 이스케이프해야하는 문자는 다음과 같습니다.

<   to   &lt;
>   to   &gt;
&   to   &amp;
"   to   &quote;
'   to   &apos;

다른 표준은 URL이 처리되는 RFC 3986 "일반 URI 표준"입니다 (사용자가 HTML 요소를 클릭하여 브라우저가 링크를 따라 가려고 할 때 발생합니다).

reserved    = gen-delims / sub-delims

gen-delims  = ":" / "/" / "?" / "#" / "[" / "]" / "@"

sub-delims  = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="

클라이언트가 데이터 또는 구분 기호를 나타내는 지 알 수 있도록 해당 문자를 이스케이프하는 것이 중요합니다.

이스케이프 처리되지 않은 예 :

https://example.com/?user=test&password&te&st&goto=https://google.com

예, 완전한 합법적 URL

https://example.com/?user=test&password&te%26st&goto=https%3A%2F%2Fgoogle.com

HTML 속성 값의 완전한 합법적 URL 예 :

https://example.com/?user=test&amp;password&amp;te%26st&amp;goto=https%3A%2F%2Fgoogle.com

또한 중요한 시나리오 :

  • 값으로 자바 스크립트 :

    <img src="..." onclick="window.location.href = &quot;https://example.com/?user=test&amp;password&amp;te%26st&amp;goto=https%3A%2F%2Fgoogle.com&quot;;">...</a>(예, ;;맞습니다)

  • 값으로 JSON :

    <a href="..." data-analytics="{&quot;event&quot;: &quot;click&quot;}">...</a>

  • 이스케이프 된 것들 내부의 이스케이프 된 것들, 이중 인코딩, 매개 변수 내의 URL 내의 URL 등 ...

    http://x.com/?passwordUrl=http%3A%2F%2Fy.com%2F%3Fuser%3Dtest&amp;password=&quot;&quot;123

참고 URL : https://stackoverflow.com/questions/3705591/do-i-encode-ampersands-in-a-href

반응형