Проблема с кодировкой при асинхронной передачи данных в POST запросах
При асинхроной передачи запросов php скрипту, который должен сохранить данные в MSSQL съезжает кодировка.
Например передаётся строка POST: action = save&field=NAME&value = Тачка. "Тачка" - сохраняется в хрен знат какой кодировке. Вообщем получаю набор непонятных символов.
Перед отправкой запроса выставляю а HTTP-заголовок: ContentType application/x-www-form-urlencoded.
Пробовал отсылать те же данные через форму без асинхронной передачи - всё нормально сохраняется.
Подскажите пожалуйста в чём может быть проблема.
Цитата: DENWER
Доброе утро, господа. Появилась проблема:
При асинхроной передачи запросов php скрипту, который должен сохранить данные в MSSQL съезжает кодировка.
Например передаётся строка POST: action = save&field=NAME&value = Тачка. "Тачка" - сохраняется в хрен знат какой кодировке. Вообщем получаю набор непонятных символов.
Перед отправкой запроса выставляю а HTTP-заголовок: ContentType application/x-www-form-urlencoded.
Пробовал отсылать те же данные через форму без асинхронной передачи - всё нормально сохраняется.
Подскажите пожалуйста в чём может быть проблема.
При асинхроной передачи запросов php скрипту, который должен сохранить данные в MSSQL съезжает кодировка.
Например передаётся строка POST: action = save&field=NAME&value = Тачка. "Тачка" - сохраняется в хрен знат какой кодировке. Вообщем получаю набор непонятных символов.
Перед отправкой запроса выставляю а HTTP-заголовок: ContentType application/x-www-form-urlencoded.
Пробовал отсылать те же данные через форму без асинхронной передачи - всё нормально сохраняется.
Подскажите пожалуйста в чём может быть проблема.
У тебя проблема в кодировке символов в базе данных и в POST переменных. Сталкивался с подобной, решил вот так:
Например, получаем $_POST['name'] перед записью в базу делаем
Код:
UTF8toCP1251($_POST['mark'])
Код:
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
);
}
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 должен перекодировывать в ту кодировку в которой у тебя храниться база.
Для соблюдения копирайтов скажу что функия перекодировки не моя, а взята с страниц какого то формума, к сожалению линк на первоисточник не помню, за нее спасибо ее автору.