Задать вопрос
fox_12
@fox_12
Расставляю биты, управляю заряженными частицами

Форма искажает данные?

Есть некая форма
<form id="register_form" enctype="text/plain" name="form_prev" method="GET" action="http://some/url/path" target="_blank" class="ng-pristine ng-valid">
...
                                <input name="signature" type="hidden" value="YT4M_тут_много_цифр _и_букв_0NGI=" id="signature">
                              </form>

Я ей делаю сабмит так:
<button class="btn btn_default btn_default_block" id="submit-register"
                                            onclick="document.getElementById('register_form').submit();">Далее</button>


Но в итоге уходит такой url:
http://some/url/path?sector=...&signature=YT4M_тут_много_цифр _и_букв_0NGI%253D

То есть данные формы искажаются, несмотря на enctype="text/plain". В результате сигнатура не принимается. Если я меняю в строке урл "%253D" на "=" - то все ок.
Что я делаю не так?
  • Вопрос задан
  • 347 просмотров
Подписаться 1 Оценить 7 комментариев
Решения вопроса 1
fox_12
@fox_12 Автор вопроса
Расставляю биты, управляю заряженными частицами
Все дело оказалось в редиректе. Сайт редиректил url с http на https, и таким образом осуществлял кодирование урл вторично.
Таким образом символ "=" первый раз кодировался в "%3D", а второй раз - уже в "%253D"
Происходило двойное кодирование, и сигнатура при декодировании давала неверный результат, вместо символа "=" - получался "%3D" и цифровая подпись не сходилась.
Всем спасибо за подсказки.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Данные формы не искажаются, а кодируются для использования в URL. На стороне сервера должно происходить автоматическое раскодирование.
Ответ написан
ivankomolin
@ivankomolin
Думаю не стоит думать о том, как в строке url браузера выглядят данные.
Необходимо смотреть, что он отправляет на сервер и что тот получает.
"Если я меняю в строке урл "%253D" на "=" - то все ок" - если это действительно так, то знак "=" вам вообще не нужно передавать)
Пример:
1. Ваш случай, когда браузер закодировал = в %253D
joxi.ru/823LpqPcldn4AO
2. Ваш случай, когда вы руками в браузере заменили %253D на =
joxi.ru/52anYx7Hq590A0
Ответ написан
<form id="register_form" ... /form>
<button ... onclick="document.getElementById('register_form').submit();">Далее</button>


К слову у button есть атрибут form, который связывает кнопку и форму по ID и onclick="" тут вообще не нужен.
Ответ написан
lazalu68
@lazalu68
Salmon
Владимир Куц, как у вас все странно.

Задача: отправить на сервер запрос, чтобы он был по-человечески принят и обработан,

Дано: вполне обыкновенная форма и сервер, который по-идиотски обрабатывает данные,

Если все так и есть, и я все правильно понял, то:

Решение №1: как-то все-таки заставить сервер обрабатывать данные нормально, как все это блин делают) urldecode и все такое

Если это невозможно, то

Решение №2: отправлять данные с помощью JS, самому формировать запрос,
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы