AJAX и русские буквы
Две самые распространенные кодировки сайтов в рунете - UTF-8 и Windows-1251. И у той и у другой есть как плюсы, так и минусы. К примеру, UTF-8 использует для кодировки одного русского символа 2 байта против 1-го у win1251, что не только увеличивает размер хранимой информации, но и не позволяет пользоваться всеми стандартными функциями php для работы со строками, т.к. эти функции изначально являются однобайтными (для работы с мультибайтовыми кодировками служит специальное расширение, которое по умолчанию при установке PHP выключено Multibyte String Functions). В свою очередь Windows-1251 вызывает сложности при использовании AJAX'а, т.к. GET и POST по умолчанию передаются в UTF-8, и их придётся перекодировать на стороне сервера "вручную".
Если вы по каким-то причинам используете Windows-1251 (или другую не-UTF-8 кодировку),
то при использовании AJAX вам могут помочь:
-
явное указание кодировки
на клиентской части это:<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
на серверной (php):header("Content-type: text/html; charset=windows-1251"); -
ручная перекодировка
при отправке из javascript применять функцию encodeURIComponent, которая кодирует в Unicodereq.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
Последний параметр заставляет сервер игнорировать кодироку, посылаемую клиентом, и использовать указанную в настройках сервера.
Всем добра!
Короткая, но очень полезная мини-статья, учитывая то, что большинство ajax-примеров не адаптированные к работе с кириллицей.
используйте кодировку UTF-8 и не будет проблем с русскими буквами :)
header("Content-type: text/html; charset=windows-1251");
и все сразу заработала
БАЗИБА
UTF-8 не спасет
Очень помогло. Кликнул аж на три рекламы))
огромное спасибо (((-:
а то никак не мог победить, чтоб jquery post туда и обратно нормально гонял русские буквы (-:
Спасибо!
И нифига оно не заработало, разборщик XML по прежнему натыкаясь на русские буквы спотыкается.
При charset=windows-1251:
IE, Opera - все нормально.
А вот Firefox, Safari и Google Chrome - ответ с сервера русскими буквами - нифига.
(На сервере linux)
respect
Чтобы XML не спотыкался на кирилице, первое что необходимо - генерировать его в UTF-8. А при перегонке в php или mysql юзать iconv. Выше написали как именно.
respect, чтобы отображались русские буквы и в случае проблемы с mysql можно в код php добавить:
mysql_query("SET NAMES cp1251"); // для mysql
header("Content-type: text/html; charset=windows-1251"); //для ajax
Спасибо, статья очень помогла
Что делать при приеме данных закодированных с помощью escape и серверной части на PHP?!
Спасибо. $_GET['a'] в скрипте преобразовалась в кракозябры, помогло $a=iconv("utf-8", "cp1251", $_GET['a']);
Про header("Content-type: text/html; charset=windows-1251");
Узнал на другом форуме, но там нужно было регистрироваться, а я этого очень не люблю, поэтому не смог сказать спасибо. Говорю Это вам))) И отдельно за эту статью. Спасибо, помогло очень.
Спасибо! Очень приятно когда первая ссылка в поисковой выдаче решает проблему )
Спасибо! Помогло!
Спс РЕБЯТА!
header("Content-type: text/html; charset=windows-1251"); и всё заработало :)
Спасибо большое)
иконв помогал для Ие, но рушил работу в мозилле. использование encodeURIComponent было то, что нужно!
хорошая и краткая статья. спасибо ещё раз!
header("Content-type: text/html; charset=windows-1251");
помогло))
с аяксом вообще давно общаюсь) но блин иногда подкидывает "радость")
Огромное спасибо!!! Долго мучился, все помогло!
Искал-искал по инету. Тут нашел. Спасибо, помогло :)
Благодарю, помогла волшебная команда header ... charset=utf-8 ;-)
Реальная полезная статья. Премного благодарен.
Спасибо огромное за пост. Искал ответ часа 3 (что для меня довольно долго, учитывая тематику). По рекламе поклацал;)
И от меня спасибо! Помогло все в комплексе!
На рекламу покликал ;)
Отличная статья.
Очень помогло когда при переходе с IE на Firefox русские буковки пропали. Решилось через ручную кодировку строки и обратную кодировку на сервере
JAVASCRIPT
var stroka=encodeURIComponent
PHP
iconv('UTF-8', 'cp1251//IGNORE', urldecode($stroka));
готовим строку для запрса к бд mySQL с кириллицей
+5!
header("Content-type: text/html; charset=windows-1251");
помогло
Помогло, спасибо!
Всю жизнь парился с этими сраными кодировками, вечно непонятные символы появлялись, однако если нравится 1251 кодировка и используешь ajax, просто в серверных php файлах надо было всего одну строчку проставить
header("Content-type: text/html; charset=windows-1251");
СПАСИБО АВТОРУ ОГРОМНОЕ!!!!!!!!!!!!!!!!!!
Помогло очень) спасибо... почему в инете нигде не встречал такого простого решения проблемы!!! спасибо !!!
Обычно никогда не оставляю комментарии, даже в полезных статьях, но пожалуй сделаю это впервые))
Премного благодарен! :)
спасибо помогло на сервчасти iconv("UTF-8", "WINDOWS-1251", $param);
Не помогло... IE выдает нормально, а вот Chrome, FF и т.п. - мимо.
всё равно, спасибо за материал.
Супер! Спасибо!
Спасибо! Помогло!
У меня лично проблема с приёмом от скрипта PHP переменных
в JAVASCRIPT (в смысле если в переменной русские буквы)
а от JAVASCRIPT до 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>';
?>
спасибо. то что надо.
не помог ни один из способов, хотя читал о них и на других сайтах.
1й способ просто абсолютно ничего не поменял, а 2й способ в яваскрипте кодирует в утф-8, а в пхп обратно не преобразовывет, так и выводится %D1%8B%d0%d1 итд.
СПАСИБО!!!!
Ничего не помогло... кодировка на сайте и в базе utf-8
передаю в ajax слово 'мама' в переменной, выводится %u043C%u0430%u043C%u0430, если кодировать принудительно переменную в utf-8 до передачи, то выводится %D0%BC%D0%B0%D0%BC%D0%B0. обратное кодирование процентики и оставляет(((
Спасибо большое. Коротко и ясно!
encodeURIComponent() вместо escape() помогло
Спасибо
Если бы все айтишники по делу писали, у таких ребят как я было бы больше время на телок, футбол и пиво) Спасибо!
UTF-8 в топку, задрала эта кодировка, одни проблемы с ней!!!!!
header("Content-type: text/html; charset=windows-1251");
то что было нужно, спасибо! без этого слетало отображение данных из бд напрочь
Самая полезная, лаконичная статья по этому вопросу среди всего "спама", который мне пришлось перечитать в сети
Мне это помогло iconv("UTF-8", "WINDOWS-1251", $param). Спасибо!
Спасибо автору за помощь. Согласен со всем, кроме части касательно windows-1251. Указаные автором методы прекрасно работают и с utf-8. А второй пункт("Ручная перекодировка") не нужна вовсе.
Была аналогичная проблема с кодировками.
База изначально в 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);
...
Спасибо!
Установка в пхп хедера помогла)
header("Content-type: text/html; charset=windows-1251");
Огромное спасибо CrashFox 21.12.11 10:31
Сделала точно так же и проблема ушла
реально статья помогла!Спасибо;)
Если всё в UTF-8 (и сайт, и БД и пр.), но всё равно фигня, попробуйте добавить в .htaccess строчку:
AddDefaultCharset UTF-8
Поможет, если хостинг по умолчанию отдаёт в windows-1251
$param=iconv("UTF-8", "WINDOWS-1251", $param);
большое спасибо :)
Браво !
Общими усилиями охватили все случаи!
Но уже какой век на дворе.
Можно ли сегодня оперировать кодировкой прошлого тысячелетия -1251 ?
И создавать самому себе проблемы...
Смотрю, тут и так много похвал, но не могу удержаться от того, чтобы написать еще одну) Коротко, ясно, спасибствую)
Спасибо огромное! Я с этим разобрался, метод позволил решить поставленную задачу. Приятно, что есть люди, которые делятся знаниями.
Спасибо!!! Очень помогло!!!
Ребята подскажите что делать! В AJAX вообще не шарю, в PHP совсем чуть чуть. Проблема та же самая. Кодировка у меня на всех страницах стоит UTF8, кодировка базы в PHPMyAdmin utf8_general_ci, использую метод serialaize() Jquery. перепробовал все что здесь написано, все равно в базу добавляются каракули!
Спасибо!
Спасибо! Все четко! Помогло!
Огромное спасибо! iconv помог
Столько похвал, здорово. У меня проблема: сайт UTF-8, БД 1251, не могу русские буквы с формы в сайте в БД записать, каракули.
Спасибо, помогла!
Ничего не помогало. Только это спасло:
mysql_query('SET character_set_database = utf8');
mysql_query('SET NAMES utf8');
Спасибо!
Сразу помогло <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />. Проверял в Google Chrom. Огромное спасибо!