Я разрабатываю плагин greasemonkey, который должен отправить форму в фоновом режиме с помощью POST (GM_xmlhttpRequest) в приложении, не находящемся под моим контролем. Это приложение написано на PHP и, похоже, ожидает его ввода в кодировке Windows-1250. Мне нужно сделать все поля формы, как они есть, отредактировать только один из них и повторно отправить. В некоторых из полей используются символы с акцентом и ограничены по длине.Связь Greasemonkey с сервером, для которого требуется кодировка windows-1250
Не проблема в теории - я повторяю все поля формы, использую функцию encodeURIComponent для значений и объединяю все в тело запроса сообщения. ОДНАКО. Функция encodeURIComponent всегда кодирует символы в соответствии с UTF-8, что приводит ко всем видам проблем. Поскольку PHP, похоже, не перекодирует мой запрос на Windows-1250 должным образом, он неправильно интерпретирует многобайтовые строки и приходит к выводу, что повторно представленные значения длиннее допустимых 40 символов и умирают от меня. Или сценарий просто умирает молча, не давая мне никакой полезной обратной связи.
Я протестировал это, посмотрев на объект POST, который отправляет Firefox, когда я отправляю форму в окне браузера, а затем повторно отправляет те же данные на сервер с помощью xhr. Это сработало. Например, строка:
Zajišťujeme profesionální modelky
выглядит следующим образом, когда кодируется encodeURIComponent:
Zaji%C5%A1%C5%A5ujeme%20profesion%C3%A1ln%C3%AD%20modelky
То же самое с помощью UrlEncode в PHP (исходный текст в Windows-1250) или Firefox:
Zaji%9A%9Dujeme+profesion%E1ln%ED+modelky
По-видимому, мне нужно кодировать как будто это было в windows-1250 или каким-то образом заставить сервер принять utf-8 (что, я сомневаюсь, возможно). Я пробовал все виды других функций, таких как escape или encodeURI, но результат не сильно отличается - все, кажется, выводятся в utf-8.
Есть ли выход из этого?
Я сам думаю, что единственный способ - это перекодировка на сервере, urlencode и отправка обратно на клиентский скрипт для отправки на внешний веб-сайт. Я бы хотел, чтобы меня оправдали. – VoY