Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с кодировкой при асинхронной передачи данных в POST запросах

5.9K
06 апреля 2007 года
DENWER
35 / / 10.07.2005
Доброе утро, господа. Появилась проблема:
При асинхроной передачи запросов php скрипту, который должен сохранить данные в MSSQL съезжает кодировка.
Например передаётся строка POST: action = save&field=NAME&value = Тачка. "Тачка" - сохраняется в хрен знат какой кодировке. Вообщем получаю набор непонятных символов.
Перед отправкой запроса выставляю а HTTP-заголовок: ContentType application/x-www-form-urlencoded.
Пробовал отсылать те же данные через форму без асинхронной передачи - всё нормально сохраняется.
Подскажите пожалуйста в чём может быть проблема.
6.3K
06 апреля 2007 года
Neutral
76 / / 13.12.2005
Цитата: DENWER
Доброе утро, господа. Появилась проблема:
При асинхроной передачи запросов php скрипту, который должен сохранить данные в MSSQL съезжает кодировка.
Например передаётся строка POST: action = save&field=NAME&value = Тачка. "Тачка" - сохраняется в хрен знат какой кодировке. Вообщем получаю набор непонятных символов.
Перед отправкой запроса выставляю а HTTP-заголовок: ContentType application/x-www-form-urlencoded.
Пробовал отсылать те же данные через форму без асинхронной передачи - всё нормально сохраняется.
Подскажите пожалуйста в чём может быть проблема.



У тебя проблема в кодировке символов в базе данных и в POST переменных. Сталкивался с подобной, решил вот так:
Например, получаем $_POST['name'] перед записью в базу делаем

 
Код:
UTF8toCP1251($_POST['mark'])
, где UTF8toCP1251:
Код:
function UTF8toCP1251($str){ // by SiMM, $table from http://ru.wikipedia.org/wiki/CP1251
  static $table = array("\xD0\x81" => "\xA8", // Ё
                        "\xD1\x91" => "\xB8", // ё
                        // украинские символы
                        "\xD0\x8E" => "\xA1", // Ў (У)
                        "\xD1\x9E" => "\xA2", // ў (у)
                        "\xD0\x84" => "\xAA", // Є (Э)
                        "\xD0\x87" => "\xAF", // Ї (I..)
                        "\xD0\x86" => "\xB2", // I (I)
                        "\xD1\x96" => "\xB3", // i (i)
                        "\xD1\x94" => "\xBA", // є (э)
                        "\xD1\x97" => "\xBF", // ї (i..)
                        // чувашские символы
                        "\xD3\x90" => "\x8C", // Ӑ (А)
                        "\xD3\x96" => "\x8D", // Ӗ (Е)
                        "\xD2\xAA" => "\x8E", // Ҫ (С)
                        "\xD3\xB2" => "\x8F", // Ӳ (У)
                        "\xD3\x91" => "\x9C", // ӑ (а)
                        "\xD3\x97" => "\x9D", // ӗ (е)
                        "\xD2\xAB" => "\x9E", // ҫ (с)
                        "\xD3\xB3" => "\x9F", // ӳ (у)
                       );
  return preg_replace('#([\xD0-\xD1])([\x80-\xBF])#se',
                      'isset($table["$0"]) ? $table["$0"] :
                       chr(ord("$2")+("$1" == "\xD0" ? 0x30 : 0x70))
                      ',
                      $str
                     );
}

Должно помочь, только соответственно ты с utf должен перекодировывать в ту кодировку в которой у тебя храниться база.
Для соблюдения копирайтов скажу что функия перекодировки не моя, а взята с страниц какого то формума, к сожалению линк на первоисточник не помню, за нее спасибо ее автору.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог