Как заставить% 20 ​​вместо + для пробелов в данных формы при отправке, используя только Javascript и / или Jquery - PullRequest
1 голос
/ 20 марта 2020

Это длинная история. Краткая форма: у меня есть старое приложение Javascript / JQuery / HTML, которое может отправлять данные формы в виде переменных строки запроса в длинный список несвязанных приложений на нескольких серверах, над которыми у меня нет контроля.

https://www.company1.com?s=this+is+the+data

Как и в примере, данные представляются в кодировке application / x- www-form-urlencoded, которая заменяет пробелы знаком +. Большинство получателей принимают это нормально. Некоторые не требуют и требуют% 20 вместо этого. В этом проблема.

Мне нужно принудительно использовать% 20 ​​для этих проблемных URL-адресов, и я ограничен Javascript и соответствующими библиотеками. Логика c анализа и обработки адресатов формы выброса не является проблемой. Мне просто нужно знать, как заставить использование% 20 для пробелов.

Примечание: я не думаю, что изменение enctype является решением, поскольку text / plain оставит меня с той же проблемой и вызовет другие проблемы и multipart / form -data оставит незашифрованные пробелы. Может я ошибаюсь?

ОБНОВЛЕНИЕ (3/20/20)

Это действительно глупое и временное исправление. Итак, я не публикую это как ответ. (Все еще надеюсь на реальное решение.)

По сути, я использую Javascript preventDefault(), чтобы перехватить все события отправки формы. Затем я проверяю указанные c URL-адреса, которые, как я знаю, завершатся с ошибкой, если используются знаки +.

Для них я собираю input имя / значения формы, создаю строку запроса вручную и пропускаю ее через encodeURIComponent(), которая кодирует пробелы с% 20, как мне нужно. Затем, вместе с формой action, я могу собрать весь URI и передать его с помощью window.location.href.

Пожалуйста, кто-нибудь скажет мне, что есть лучший способ сделать это полностью на стороне клиента!

...