앰퍼샌드로 인코딩 합니까?
HTML을 자동으로 생성하는 코드를 작성 중이며 올바르게 인코딩하고 싶습니다.
다음 URL에 대한 링크를 생성한다고 가정 해보십시오.
http://www.google.com/search?rls=en&q=stack+overflow
모든 속성 값을 HTML로 인코딩해야한다고 가정합니다. (잘못된 경우 수정하십시오.) 따라서 위의 URL을 앵커 태그에 넣으면 앰퍼샌드를 다음 &
과 같이 인코딩해야 합니다.
<a href="http://www.google.com/search?rls=en&q=stack+overflow">
그 맞습니까?
그렇습니다. HTML 엔터티는 HTML 특성 내에서 구문 분석되며 길 &
을 잃으면 모호성이 생깁니다. 당신은 항상 작성해야하는 이유의 &
대신으로 &
내부의 모든 HTML 특성을가집니다.
즉 말했다 만 &
따옴표가 필요로 인코딩 할 수 있습니다. é
속성 과 같은 특수 문자가 있으면 HTML 파서를 만족시키기 위해 해당 문자 를 인코딩 할 필요가 없습니다.
예를 들어 URL과 같이 ASCII가 아닌 문자로 특수 처리해야하는 경우가 é
있었습니다. 퍼센트 이스케이프를 사용하여 인코딩해야했으며,이 경우 %C3%A9
RFC 1738에 의해 정의 되었으므로 줄 것 입니다. 그러나 RFC 1738은 RFC 3986 (URI, Uniform Resource Identifiers) 및 RFC 3987 (IRI, Internationalized Resource Identifiers) 로 대체되었으며 WhatWG는 브라우저가 ASCII가 아닌 URL을 볼 때 브라우저의 작동 방식을 정의하는 작업을 수행했습니다. HTML5 이후의 문자 . 따라서 퍼센트 인코딩 여부에 관계없이 URL에 비 ASCII 문자를 포함시키는 것이 안전합니다.
현재 공식 HTML 권장 사항에 따라 앰퍼샌드는 &
이 문맥에서와 같이 이스케이프되어야합니다 . 그러나 브라우저는이를 요구하지 않으며 HTML5 CR에서는이를 규칙 으로 만들 것을 제안 하므로 속성 값에 특수 규칙이 적용됩니다. 현재 HTML5 유효성 검사기는이 점에서 구식입니다 ( 댓글이있는 버그 보고서 참조 ).
속성 값에서 앰퍼샌드를 이스케이프하는 것은 가능하지만 현재 도구를 사용한 유효성 검증과는 별도로 값에서 이스케이프 할 필요가 없습니다 href
(이스케이프를 시작하면 실수 할 위험이 적습니다).
예,로 변환해야 &
합니다 &
.
W3C의이 html 유효성 검사기 도구 는 이와 같은 질문에 도움이됩니다. 특정 페이지에 대한 오류 및 경고가 표시됩니다.
zneak의 답변에 충분한 예제가 없으며 HTML 및 URI 처리가 다른 측면 및 표준으로 표시되지 않고 사소한 것들이 없기 때문에 새로운 답변을 게시하고 있습니다.
링크의 URL과 관련된 두 가지 표준이 있습니다 ( <a href
).
첫 번째 표준은 RFC 1866 (HTML 2.0)입니다. 여기서 "3.2.1. 데이터 문자"에서 HTML 속성 값으로 사용될 때 이스케이프해야하는 문자를 읽을 수 있습니다. (특성 자체는 특수 문자를 전혀 허용하지 않습니다. 예를 들어 <a hr&ef="http://...
, 허용되지 않거나 아닙니다 <a hr&ef="http://...
.)
나중에 이것은 HTML 4 표준에 적용 되었으며, 이스케이프해야하는 문자는 다음과 같습니다.
< to <
> to >
& to &
" to "e;
' to '
다른 표준은 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&password&te%26st&goto=https%3A%2F%2Fgoogle.com
또한 중요한 시나리오 :
값으로 자바 스크립트 :
<img src="..." onclick="window.location.href = "https://example.com/?user=test&password&te%26st&goto=https%3A%2F%2Fgoogle.com";">...</a>
(예,;;
맞습니다)값으로 JSON :
<a href="..." data-analytics="{"event": "click"}">...</a>
이스케이프 된 것들 내부의 이스케이프 된 것들, 이중 인코딩, 매개 변수 내의 URL 내의 URL 등 ...
http://x.com/?passwordUrl=http%3A%2F%2Fy.com%2F%3Fuser%3Dtest&password=""123
참고 URL : https://stackoverflow.com/questions/3705591/do-i-encode-ampersands-in-a-href
'programing tip' 카테고리의 다른 글
데이터베이스와 데이터웨어 하우스의 차이점은 무엇입니까? (0) | 2020.06.08 |
---|---|
차이점은 무엇입니까 (0) | 2020.06.08 |
Chosen과 Select2의 차이점은 무엇입니까? (0) | 2020.06.08 |
vs2010을 사용하여 C ++ / CLI 프로젝트를 4.0 이외의 다른 프레임 워크로 변경 (0) | 2020.06.08 |
Amazon EBS 볼륨 크기 증가 (0) | 2020.06.08 |