При использовании AJAX, особенно совместно с MySQL, могут возникнуть проблемы с передачей русских букв между скриптами независимо от метода (GET или POST). Решением является:
явное указание кодировки
На клиентской части это
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
, на серверной (php) -
header("Content-type: text/html; charset=windows-1251");
ручная перекодировка
при отправке из javascript применять функцию encodeURIComponent, которая кодирует в Unicode
req.send('param='+encodeURIComponent('привет мир'));
в серверной части приводим к нужной кодировке с помощью iconv
iconv("UTF-8", "WINDOWS-1251", $param);
Также часто проблемы с кодировкой могут возникать из-за неверных настроек MySQL. В этом случае необходимо внести коррективы в файл my.cnf/my.ini (в зависимости от версии). В разделе mysqld должны быть строки:
default-character-set = cp1251
init-connect="SET NAMES cp1251"
skip-character-set-client-handshake=1
Последний параметр заставляет сервер игнорировать кодироку, посылаемую клиентом, и использовать указанную в настройках сервера.