Как прочитать длинный адрес
Ссылка с метками, OAuth-колбэк или цепочка редиректов приходит стеной процентных последовательностей, внутри которой лежит ещё один адрес. Декодирование возвращает всё это в вид, о котором можно рассуждать: какие параметры заданы, куда на самом деле ведёт редирект, уцелел ли параметр state.
Раскодировать один раз, а не два
Двойное кодирование встречается часто, и двойное декодирование — та ошибка,
которую оно порождает. Если значение закодировали дважды, вместо %20 появится
%2520: первое декодирование даст %20, второе — пробел. Если в результате всё
ещё видны escape-последовательности, это и есть сигнал — декодируйте ещё раз
осознанно, а не считайте, что инструмент не сработал.
В обратную сторону: если раскодировать значение, закодированное один раз, а
потом раскодировать снова, буквальный % из исходного текста будет испорчен.
Три режима
Декодирование компонента подходит для одного значения параметра. Декодирование
всего адреса не трогает структурные символы, поэтому %2F внутри пути останется
экранированным, а не превратится в слэш, меняющий маршрут. Режим формы
дополнительно считает + пробелом.
Вопросы
Почему в раскодированном тексте остался плюс?+
Потому что вы декодировали в режиме компонента, а строка была закодирована как данные формы. В кодировании формы одиночный + означает пробел, а в пути — обычный плюс. Переключитесь в режим формы, и + станет пробелом.
Что означает «URI malformed»?+
Символ %, за которым не идут две шестнадцатеричные цифры. Обычно строку обрезали посреди экранирующей последовательности либо её уже один раз раскодировали, и от исходного текста остался буквальный %. Двойное декодирование — самая частая причина.
Почему в результате появились Ð и â?+
Где-то по пути текст закодировали как UTF-8, а раскодировали как Latin-1. Этот инструмент декодирует как UTF-8, то есть правильно, — значит, эти символы были уже во входных данных, и порча произошла выше по цепочке.
Безопасно ли вставлять адрес с токеном?+
Он не покидает браузер. Декодирование — это операция над строкой в текущей вкладке, поэтому локальный декодер и есть правильное место для подписанного редиректа или OAuth-колбэка.