Я публикую новый ответ, потому что обнаружил, что в ответе 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 '
Другой стандарт - RFC 3986 «Общий стандарт URI», где обрабатываются URL-адреса (это происходит, когда браузер собирается перейти по ссылке, потому что пользователь нажал на HTML элемент).
reserved = gen-delims / sub-delims
gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"
sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
Важно избегать этих символов, чтобы клиент знал, представляют ли они данные или разделитель.
Пример unescaped:
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
Пример полностью допустимого URL-адреса в значении атрибута HTML:
https://example.com/?user=test&password&te%26st&goto=https%3A%2F%2Fgoogle.com
Также важны сценарии: