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

Последний параметр заставляет сервер игнорировать кодироку, посылаемую клиентом, и использовать указанную в настройках сервера.

78 thoughts on “AJAX и русские буквы — проблема с кодировкой.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  17. header("Content-type: text/html; charset=windows-1251"); помогло)) с аяксом вообще давно общаюсь) но блин иногда подкидывает "радость")

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

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

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

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

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

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

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

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

  26. JAVASCRIPT var stroka=encodeURIComponent PHP iconv('UTF-8', 'cp1251//IGNORE', urldecode($stroka)); готовим строку для запрса к бд mySQL с кириллицей

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

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

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

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

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

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

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

  34. У меня лично проблема с приёмом от скрипта 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>'; ?>

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

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

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

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

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

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

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

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

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

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

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

  46. Была аналогичная проблема с кодировками. База изначально в 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); …

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

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

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

  50. Если всё в UTF-8 (и сайт, и БД и пр.), но всё равно фигня, попробуйте добавить в .htaccess строчку: AddDefaultCharset UTF-8 Поможет, если хостинг по умолчанию отдаёт в windows-1251

  51. $param=iconv("UTF-8", "WINDOWS-1251", $param); большое спасибо 🙂

  52. Браво ! Общими усилиями охватили все случаи! Но уже какой век на дворе. Можно ли сегодня оперировать кодировкой прошлого тысячелетия -1251 ? И создавать самому себе проблемы ..

  53. Смотрю, тут и так много похвал, но не могу удержаться от того, чтобы написать еще одну) Коротко, ясно, спасибствую)

  54. Спасибо огромное! Я с этим разобрался, метод позволил решить поставленную задачу. Приятно, что есть люди, которые делятся знаниями.

  55. header("Content- type:text/html; charset=windows-1251"); помогает только не для оперы. В опере все такой же страшный код. Подскажите что делать?

  56. Ребята подскажите что делать! В AJAX вообще не шарю , в PHP совсем чуть чуть. Проблема та же самая. Кодировка у меня на всех страницах стоит UTF8, кодировка базы в PHPMyAdmin utf8_general_ci, использую метод serialaize() Jquery. перепробовал все что здесь написано, все равно в базу добавляются каракули! Спасибо!

  57. Столько похвал, здорово. У меня проблема: сайт UTF-8, БД 1251, не могу русские буквы с формы в сайте в БД записать, каракули.

  58. Ничего не помогало. Только это спасло: mysql_query('SET character_set_database = utf8'); mysql_query('SET NAMES utf8'); Спасибо!

  59. Сразу помогло <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />. Проверял в Google Chrom. Огромное спасибо!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *