Кодирование и декодирование URL

Кодирует адрес, значение параметра или тело формы и разбирает уже закодированную строку. UTF-8 совпадает с encodeURIComponent. Если другая сторона не в Unicode, смените кодировку.

Три кодирования — три места в адресе

Косая черта в пути должна остаться чертой. Внутри параметра она должна стать %2F. В форме пробел — это +, в query обычно %20. Если закодировать весь адрес не той функцией, откроется не та страница.

  • Одно значение — это encodeURIComponent. Поиск, идентификатор, адрес возврата.
  • Адрес целиком — это encodeURI. Остаются : / ? #.
  • Тело формы: пробел становится плюсом. Это POST, не ссылка.

Где обычно ошибаются

Настоящий плюс внутри значения должен быть %2B, иначе сервер прочитает пробел. & и = внутри значения открывают следующий параметр. UTF-8 по умолчанию совпадает с encodeURIComponent: каждый байт «ё» — это % и две шестнадцатеричные цифры. Если другая сторона не в Unicode, смените кодировку. Hex кодирует сырые байты из поля.

Готовый https:// не кодируйте как одно значение: пропадут двоеточие и косые черты. Кодируйте части и потом склейте. Байты: строка в байты. Другая запись: Base64.

Вопросы

Пробел стал плюсом

Выбрано тело формы. Для ссылки возьмите одно значение.

После раскодирования осталось %20

Строку кодировали дважды. Раскодируйте ещё раз, пока текст не станет читаемым.