Предположим, что у нас имеется некоторый js объект, основной функцией которого является отправка ajax запросов. ( Для определённости назовём его
ajaxObj, запрос выполняется методом
ajaxObj.query() ). Пусть для отправки данных серверу нам необходимо передать методу
query() js объект в виде пар ключ значение. Пример:
var data = { key_1: ‘some_data_1’,
key_2:’some_data_2’ …
};
.
JS работает с кодировкой
utf-8, а на сервере в большинстве случаев имеем
windows-1251. Для корректной передачи данных от сценария JS их нужно закодировать. Таким образом наш JS запрос будет выглядеть так:
ajaxObj.query( { key_1 : encodeURIComponent( ‘some_data_1’ ),
key_2 : encodeURIComponent( ‘some_data_2’ ),
key_3 : encodeURIComponent( ‘some_data_3’ )…
} );
Приём данных сервером.
Пусть заранее известно, что на сервере используется PHP, кодировка windows-1251, а данные предаются методом POST ( через массив $_POST ). Тогда, чтобы получить адекватные данные используем следующий код:
foreach ( $_POST as &$v ) {
if ( !is_int( $v ) )
$v = iconv( 'utf-8', 'windows-1251', urldecode( $v ) );
}
Далее работаем с массивом $_POST, так как будто передача шла не через JS, а как обычно.
Пусть в результате серверных операций мы получили массив $result, данные которого нам нужно вернуть в JS скрипт. Поступаем с точностью да на оборот.
foreach ( $result as &$v ) {
if ( !is_int( $v ) )
$v = iconv( 'windows-1251', 'utf-8', $v );
}
Далее посылаем заголовок, в котором указываем, что данные будут отправлены в
UTF-8 ( В данном конкретном случае в заголовке по мимо кодировки указано, что данные будут отправлены в формате json)
header("Content-Type: x-json; charset=UTF-8");
А затем отправляем сами данные. ( функции jencode – не существует, я просто хочу сказать что в данном случае массив $result кодируется в json формат, для решения этой задачи существуют PHP библиотеки, а в PHP 5 есть встроенная функция. )
echo jencode( $result );