Кодирует адрес, значение параметра или тело формы и разбирает уже закодированную строку. UTF-8 совпадает с encodeURIComponent. Если другая сторона не в Unicode, смените кодировку.
Три кодирования — три места в адресе
Косая черта в пути должна остаться чертой. Внутри параметра она должна стать %2F. В форме пробел — это +, в query обычно %20. Если закодировать весь адрес не той функцией, откроется не та страница.
Одно значение — это encodeURIComponent. Поиск, идентификатор, адрес возврата.
Адрес целиком — это encodeURI. Остаются : / ? #.
Тело формы: пробел становится плюсом. Это POST, не ссылка.
Где обычно ошибаются
Настоящий плюс внутри значения должен быть %2B, иначе сервер прочитает пробел. & и = внутри значения открывают следующий параметр. UTF-8 по умолчанию совпадает с encodeURIComponent: каждый байт «ё» — это % и две шестнадцатеричные цифры. Если другая сторона не в Unicode, смените кодировку. Hex кодирует сырые байты из поля.
Готовый https:// не кодируйте как одно значение: пропадут двоеточие и косые черты. Кодируйте части и потом склейте. Байты: строка в байты. Другая запись: Base64.
Вопросы
Пробел стал плюсом
Выбрано тело формы. Для ссылки возьмите одно значение.
После раскодирования осталось %20
Строку кодировали дважды. Раскодируйте ещё раз, пока текст не станет читаемым.