logo


home map contact


Если вы видите это сообщение - значит вы используете браузер Internet Explorer. Негативное отношение к этому браузеру сложилось не только у владельца данного ресурса, но и у подавляющего большинства людей, разбирающихся в web технологиях. Попробуйте установить один из браузеров по ссылке ниже, возможно вам он тоже понравится больше!

Opera, the fastest and most secure web browser     Spread Firefox Affiliate Button

AJAX и русские буквы - проблема с кодировкой.

При использовании AJAX, особенно совместно с MySQL, могут возникнуть проблемы с передачей русских букв между скриптами независимо от метода (GET или POST). Решением является:

  1. явное указание кодировки
    На клиентской части это
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
    , на серверной (php) -
    header("Content-type: text/html; charset=windows-1251");
  2. ручная перекодировка
    при отправке из 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
Последний параметр заставляет сервер игнорировать кодироку, посылаемую клиентом, и использовать указанную в настройках сервера.



Комментарии:



virua     18.03.08 в 12:11

Короткая, но очень полезная мини-статья, учитывая то, что большинство ajax-примеров не адаптированные к работе с кириллицей.





WearyMax     20.03.08 в 16:39

используйте кодировку UTF-8 и не будет проблем с русскими буквами :)





AlexHustas     09.04.08 в 16:32

header("Content-type: text/html; charset=windows-1251");
и все сразу заработала
БАЗИБА





epictetus    25.06.08 в 16:51

UTF-8 не спасет





Ov4ina    18.08.08 18:01

Очень помогло. Кликнул аж на три рекламы))




none    24.11.08 15:47

огромное спасибо (((-: а то никак не мог победить, чтоб jquery post туда и обратно нормально гонял русские буквы (-: Спасибо!




unnamed    16.12.08 16:31

И нифига оно не заработало, разборщик XML по прежнему натыкаясь на русские буквы спотыкается.




anonymous    18.12.08 12:17

При charset=windows-1251: IE, Opera - все нормально. А вот Firefox, Safari и Google Chrome - ответ с сервера русскими буквами - нифига. (На сервере linux)




Vasily    23.12.08 14:17

respect




neutrino    12.01.09 17:35

Чтобы XML не спотыкался на кирилице, первое что необходимо - генерировать его в UTF-8. А при перегонке в php или mysql юзать iconv. Выше написали как именно.




popovich    07.02.09 17:50

respect, чтобы отображались русские буквы и в случае проблемы с mysql можно в код php добавить: mysql_query(\"SET NAMES cp1251\"); // для mysql header(\"Content-type: text/html; charset=windows-1251\"); //для ajax




wzonnet    15.02.09 22:25

А я вот тыкался, и под denwer\'om ничего не помогало. Тогда я тупо взял процедуры конвертации http://wzonnet.freezoka.com/ajax-jquery-javascript/uii-oaii-a-u-oioai-cp1251-i-utf8/




stroiceny.ru    19.02.09 12:56

Спасибо быстрая реальная помощь респект




Devastator    24.02.09 16:25

Спасибо, статья очень помогла




drd0s    03.03.09 16:23

Что делать при приеме данных закодированных с помощью escape и серверной части на PHP?!




Cookson    27.03.09 21:36

Спасибо. $_GET[\'a\'] в скрипте преобразовалась в кракозябры, помогло $a=iconv(\"utf-8\", \"cp1251\", $_GET[\'a\']);




Spazm    02.04.09 15:50

Про header(\"Content-type: text/html; charset=windows-1251\"); Узнал на другом форуме, но там нужно было регистрироваться, а я этого очень не люблю, поэтому не смог сказать спасибо. Го ворю Это вам))) И отдельно за эту статью. Спасибо, помогло очень.




SpaceMindX    21.04.09 15:03

Спасибо! Очень приятно когда первая ссылка в поисковой выдаче решает проблему )




Игорь    27.04.09 02:09

Спасибо ! Помогло !




MadFly    28.04.09 20:47

Спс РЕБЯТА! header("Content-type: text/html; charset=windows-1251"); и всё заработало :)




Салават    02.08.09 21:41

Спасибо большое)
исконв помогал для Ие, но рушил работу в мозилле. использование encodeURIComponent было то, что нужно!

хорошая и краткая статья. спасибо ещё раз!




Romash    06.08.09 11:29

header("Content-type: text/html; charset=windows-1251");

помогло))

с аяксом вообще давно общаюсь) но блин иногда подкидывает "радость")




Jakis    14.09.09 17:48

Огромное спасибо!!! Долго мучился, все помогло!




Андрей    13.11.09 00:14

Искал-искал по инету. Тут нашел. Спасибо, помогло :)




Отори    17.11.09 11:30

Благодарю, помогла волшебная команда header ... charset=utf-8 ;-)




dizelbox    19.11.09 13:51

Реальная полезная статья. Премного благодарен.




Vect0r    28.11.09 09:08

Спасибо огромное за пост. Искал ответ часа 3 (что для меня довольно долго, учитывая тематику). По рекламе поклацал;)




Feskel    03.12.09 15:35

И от меня спасибо! Помогло все в комплексе!
На рекламу покликал ;)




Lyulyok    16.12.09 16:01

Спасибо!
header ... charset=utf-8 и все заработало:-)




Максим    04.02.10 02:25

Отличная статья.
Очень помогло когда при переходе с IE на Firefox русские буковки пропали. Решилось через ручную кодировку строки и обратную кодировку на сервере




nikel    10.04.10 10:13

JAVASCRIPT
var stroka=encodeURIComponent
PHP
iconv('UTF-8', 'cp1251//IGNORE', urldecode($stroka));

готовим строку для запрса к бд mySQL с кириллицей




FATALITY    20.04.10 15:07

+5!

header("Content-type: text/html; charset=windows-1251");
помогло




anonymous    17.08.10 22:02

не помогло




Samara    19.08.10 21:18

Помогло, спасибо!




Стас    20.08.10 10:28

Всю жизнь парился с этими сраными кодировками, вечно непонятные символы появлялись, однако если нравится 1251 кодировка и используешь ajax, просто в серверных php файлах надо было всего одну строчку проставить
header("Content-type: text/html; charset=windows-1251");
СПАСИБО АВТОРУ ОР+ГРОМНОЕ!!!!!!!!!!!!!!!!!!




Артем    11.09.10 12:46

Помогло очень) спасибо... почему в инете нигде не встречал такого простого решения проблемы!!! спасибо !!!




wm    28.09.10 07:59

Обычно никогда не оставляю комментарии, даже в полезных статьях, но пожалуй сделаю это впервые))
Премного благодарен! :)




a-potap    27.10.10 10:58

спасибо помогло на сревчасти iconv("UTF-8", "WINDOWS-1251", $param);




int99h    27.10.10 14:03

Не помогло... IE выдает нормально, а вот Chrome, FF и т.п. - мимо.
всё равно, спасибо за материал.




dag    31.10.10 14:59

и чё и чё...




Fiu    07.12.10 22:25

Это все бред! Я такой то разработчик сайта Google с посещаемостью несколько миллионов хостов в день. Типа сейчас могу обосновать.




Славик    16.12.10 21:20

Спасибо, мне помогло.




Макс    04.03.11 17:57

Супер! Спасибо!




КрисТиночка    03.04.11 22:11

Спасибо! Помогло!




Дмитрий Иванович    07.04.11 00:38

У меня лично проблема с приёмом от скрипта PHP переменных
в JAVASCRIPT (в смысле если в переменной русские буквы)
а от AVASCRIPT до PHP русский шрифт проходит нормально
привожу код PHP
<?php
// результат отправляем в формате XML
header('Content-Type: text/xml');
// Генерировать заголовок XML
echo '<?xml version="1.0" encoding="windows-1251" standalone="yes"?>';
// Создать элемент <response>
echo '<response>';
// Получить имя пользователя
$name = $_GET['name'];
//Вывод сообщения (переменная name передаёт адэкватно если только латинские буквы в ней)
echo htmlentities($name) . ', текст что в этих скобках выводится адэкватно';
// закрыть элемент<response>
echo '</response>';
?>




Сергей    13.04.11 12:32

спасибо. то что надо.




ае    22.04.11 15:04

не помог ни один из способов, хотя читал о них и на других сайтах.
1й способ просто абсолютно ничего не поменял, а 2й способ в яваскрипте кодирует в утф-8, а в пхп обратно не преобразовывет, так и выводится %D1%8B%d0%d1 итд.




Дима    12.05.11 12:09

СПАСИБО!!!!




Юрий    25.05.11 11:00

Ничего не помогло... кодировка на сайте и в базе utf-8
передаю в ajax слово 'мама' в переменной, выводится %u043C%u0430%u043C%u0430 , если кодировать принудительно переменную в utf-8 до передачи, то выводится %D0%BC%D0%B0%D0%BC%D0%B0. обратное кодирование процентики и оставляет(((




Дмитрий    30.05.11 14:35

Спасибо большое. Коротко и ясно!




Pavel    14.06.11 16:07

encodeURIComponent() в место escape() помогло
Спасибо




Саня    25.07.11 22:16

Если бы все айтишники по делу писали, у таких ребят как я было бы больше время на телок, футбол и пиво) Спасибо!




Шинкарев    18.09.11 23:57

Коллеги, после долгих проб и ошибок, прикрутил на свой сайт (shinkareff.ru, работает под win-1251) форму комментариев от Disqus. Во всех браузерах (ФФ, Опера, Хром, Сафари), кроме ИЕ, работает нормально. В ИЕ ломается кодировка. Сам комментарий отображается нормально, а текст интерфейса — неверно.

Помогите советом, примером или ссылкой.




Тимур    28.09.11 18:40

UTF-8 в топку, задрала эта кодировка, одни проблемы с ней!!!!!




Asayhem    11.10.11 05:19

header("Content-type: text/html; charset=windows-1251");
то что было нужно, спасибо! без этого слетало отображение данных из бд напрочь




ecolora    26.10.11 12:33

Ответ однозначно не полный! Я предлагаю своё решение, в зависимости от кодировки сайта:




Сергей    24.11.11 11:23

Самая полезная, лаконичная статья по этому вопросу среди всего "спама", который мне пришлось перечитать в сети




fanat    02.12.11 23:58

Мне это помогло iconv("UTF-8", "WINDOWS-1251", $param). Спасибо!




Рафаел    04.12.11 12:33

Спасибо автору за помощь. Согласен со всем, кроме части касательно windows-1251. Указаные автором методы прекрасно работают и с utf-8. А второй пункт("Ручная перекодировка") не нужна вовсе. Пример написанного мной поиск сайта http://t-tet.ru .




CrashFox    21.12.11 10:31

Была аналогичная проблема с кодировками.
База изначально в utf-8
По умолчанию кодировка для страниц со стороны сервера utf-8
Мне помогло следующее (на серверной стороне):
До:
...
$query = "select * from table";
$result = mysql_query($query);
...
После:
...
$query = "select * from table";
mysql_query('SET character_set_database = utf8');
mysql_query('SET NAMES utf8');
$result = mysql_query($query);
...




Дима    21.12.11 15:41

Спасибо!
Установка в пхп хедера помогла)
header("Content-type: text/html; charset=windows-1251");




Ирина    22.12.11 09:45

Огромное спасибо CrashFox 21.12.11 10:31
Сделала точно так же и проблема ушла




nalbuh.ru    06.01.12 20:38

Кто нибудь решил проблему DISQUS на странице с кодировкой WIN1251?




Антон    26.04.12 16:30

реально статья помогла!Спасибо;)






Если вам помогла или просто понравилась эта статья вы можете отблагодарить автора кликнув по рекламе. Спасибо!





комментировать:
прежде чем писать комментарий убедитесь, пожалуйста, что он не попадает в нижеследующие категории:
  • не стоит писать "я чайник, помогите ..." или "я начинающий, объясните ..." - уважайте себя! может вы и новичок, но ведь не тупой же! сами вполне способны во всем разобраться, тем более, что материал здесь изложен весьма доступно

  • не пишите вопросы типа "как мне сделать такую же менюху как наверху?", "куда вставлять этот код?", "как устроен интернет?" и т.д. - уважайте время автора!

  • комментарии вида "все, что здесь написано - бред" будут оставлены только если будут подписаны "я такой-то, разработчик сайта такого-то с посещаемостью 1000 хостов в день" и т.п. Если вы не согласны с чем-то - обоснуйте, напишите как правильно, а писать простые ругательства не надо, это не забор

прямые оскорбления кого бы то ни было будут удалятся!
здоровая критика приветствуется!



от кого:  

security picture