2013-04-23 6 views
0

Мое веб-приложение PHP работает на кодировке ISO-8859-1. Когда я отправляю HTML-форму с accept-charset = «ISO-8859-1» на сервер PHP, это то, что я получаю на стороне сервераИспользование Javascript/jQuery Replicate HTML Form POST с ISO-8859-1 charset

a. Символы ASCII в оригинальной форме.

b. Специальные символы, которые могут быть представлены в ISO-8859-1 в их первоначальном виде.

c. Специальные символы, которые не могут быть представлены в ISO-8859-1, преобразуются в объекты HTML.

Все данные принимаются в качестве надлежащих символов ISO-8859-1. Я хочу реплицировать то же поведение с помощью JavaScript или jQuery. Все решения, которые я пробовал, в конечном итоге отправляют все специальные символы в PHP-файл как двойные кодированные символы, и я должен их utf8_decode.

Я сделал рабочий раствор следующим образом:

а. конвертировать неподдерживаемые специальные символы в объекты HTML.

b. отправьте запрос на отправку JavaScript AJAX с помощью XMLHttpRequest/ActiveXObject. Для этого мне нужно «encodeURIComponent()» данные.

c. получать данные на сервере и «utf8_decode()», потому что «encodeURIComponent()» кодирует специальные символы как UTF-8.

Я хочу использовать JavaScript-решение, которое гарантирует, что я получаю надлежащие ISO-8859-1 кодированные данные от POST на стороне сервера, так что мне не нужно делать «utf8_decode()». Другими словами, я хочу, чтобы решение JavaScript точно воспроизводило поведение формы с помощью accept-charset = «ISO-8859-1».

Спасибо

+0

* Мое веб-приложение PHP работает на кодировке ISO-8859-1 * - В 21 веке? Зачем?! – Quentin

+0

@Quentin Потому что это не приложение 21 века :). Я разработчик и, конечно, принадлежит моему клиенту. Приложение настолько широко распространено, что перенос кода, и особенно база данных с миллиардами записей в UTF-8, не является первым вариантом. – Adee

ответ

0

Насколько мне известно, нет никакого способа, безошибочного в JavaScript, чтобы сделать это. Кодировка символов не является признаком Javascript, и я считаю, что это происходит главным образом потому, что оставляет такие области на усмотрение другим, например, HTML, который описывает контент, язык сервера, который выполняет синтаксический анализ, или веб-сервер, обеспечивающий среду.

Что касается любой функции кодирования/декодирования URI в JS, это все UTF-8, и он встроен, так как в нем нет параметра, который вы можете передать, чтобы переопределить его.

Вы также можете попробовать что-то в линиях переопределяет MimeType и указав новый, как:

var xhr = new XMLHttpRequest(); 
if (xhr.overrideMimeType) { 
    xhr.overrideMimeType('application/x-javascript; charset=ISO-8859-1'); 
} 

Не уверен, насколько стабильна она есть, но это одно из направлений вы можете исследовать ..

+0

Это ничего не меняет. Спасибо за вашу поддержку. По крайней мере, теперь я не один, чтобы сказать, что это невозможно сделать с помощью JavaScript. – Adee