Фон
Это немного тоньше, чем можно подумать с первого взгляда. Для любого URL, который является специфической формой стандарта URI, определенные символы являются специальными. Среди специальных символов :
(разделитель схемы) и /
(разделитель пути или иерархии), вот полный список зарезервированных символов из RFC-2396 :
reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
"$" | ","
Это не имеет ничего общего с безопасностью, гораздо больше с простым следованием стандарту: эти символы означают нечто особенное в любом URI, URL или URN. Когда вам нужно использовать их как часть пути или строки запроса (запрос GET создает для вас строку запроса), вам необходимо их избежать. Краткая версия экранирования: возьмите байты UTF-8 как шестнадцатеричные и поставьте перед ними знак %
. В случае зарезервированных символов это всегда однобайтовый символ в UTF-8, и поэтому он экранируется как две шестнадцатеричные цифры.
Путь к решению
Вернемся к вашей проблеме. Вы не упомянули, какой язык вы используете. Но любой язык, который работает с Интернетом, имеет способ кодирования или декодирования URL. У некоторых есть вспомогательные функции для декодирования целого URL, но обычно вам лучше разбить его на пары имя / значение и затем декодировать его. Это даст вам абсолютный URL-путь, который вам нужен.
Примечание: лучше всего всегда декодировать значения запроса, просто потому, что когда люди вводят значение, они не будут знать, зарезервировано ли это значение, и браузер закодирует его для вас. Невыполнение этого требования создает угрозу безопасности.
РЕДАКТИРОВАТЬ: Когда вам нужно декодировать внутри страницы, а не на стороне сервера, вам понадобится JavaScript для выполнения этой работы. Посмотрите на эту страницу для en / decoding URLs или используйте Google, чтобы найти много других.