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