Всегда безопасно
Они безопасны (в теории / спецификации), в основном везде, кроме доменного имени.
Процентное кодирование ничего не указано, и вы готовы.
A-Z a-z 0-9 - . _ ~ ( ) ' ! * : @ , ;
Иногда безопасно
Безопасно только при использовании в определенных компонентах URL; используйте с осторожностью.
Paths: + & =
Queries: ? /
Fragments: ? / # + & =
Никогда не безопасно
Согласно спецификации URI (RFC 3986) все остальные символы должны быть в процентах. Это включает:
<space> <control-characters> <extended-ascii> <unicode>
% < > [ ] { } | \ ^
Если важна максимальная совместимость, ограничьте кодировку AZ az 0-9 - _.
(с периодами только для расширений файлов).
Держите контекст в уме
Даже если он действителен для каждой спецификации, URL-адрес может быть «небезопасным», в зависимости от контекста. Например, file: /// URL-адрес, содержащий недопустимые символы имени файла, или компонент запроса, содержащий «?», «=» И «&», если они не используются в качестве разделителей. Правильная обработка этих случаев, как правило, зависит от ваших сценариев и может быть обойдена, но об этом нужно помнить.