Показать сообщение отдельно
  #8 (permalink)  
Старый 03.10.2009, 00:48
Интересующийся
Отправить личное сообщение для alexeews Посмотреть профиль Найти все сообщения от alexeews
 
Регистрация: 28.09.2008
Сообщений: 12

Предположим, что у нас имеется некоторый 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 );
Ответить с цитированием