Проблема с кодировками в HTML и AJAX
При выполнении AJAX возникает неприятная вещь, возвращаемые русские символы становятся непонятной кодировкой. Передаю HTML, после приемы данных они обрабатываются JavaScript'ом(вставляются в содержание списка(select)). Кодировка основной страницы windows-1251, такая же и при посылке данных(header("Content-Type: text/html;charset=windows-1251");). Самая интересная особенность, это то, что у меня все отлично работает, но у некоторых возникают знаки вопроса вместо текста. Как можно исправить эту ошибку?
... либо делать странице полностью в UTF8
К сожалению в UTF-8 уже переделать ничего не получится, так как проект на поздней стадии. А каким же образом можно перекодировать в JavaScript симполы?
Описание
string iconv ( string $in_charset, string $out_charset, string $str )
Производит преобразование кодировки символов строки str из начальной кодировки in_charset в конечную out_charset. Возвращает строку в новой кодировке, или FALSE в случае ошибки.
Если добавить //TRANSLIT к параметру out_charset будет включена транслитеризация. Это означает, что вслучае, когда символа нет в конечной кодировке, он заменяется одним или несколькими аналогами. Если добавить //IGNORE, то символы, которых нет в конечной кодировке, будут опущены. Иначе, будет возвращена строка str, обрезанная до первого недопустимого символа.
Пример 892. Пример использования iconv():
<?php
echo iconv("KOI8-U", "UTF-8", "Пора переходить на юникод.");
?>
На PHP я это знаю, а вот на JavaScript'e... Ведь у меня после того как приходят данные не выполняется никакие PHP скрипты, поэтому таким способом ничего не получится добиться. Возможно я и неправ и можно как-то динамически выполнить PHP без перегрузки страницы.
Цитата: 63uK
На PHP я это знаю, а вот на JavaScript'e... Ведь у меня после того как приходят данные не выполняется никакие PHP скрипты, поэтому таким способом ничего не получится добиться. Возможно я и неправ и можно как-то динамически выполнить PHP без перегрузки страницы.
Дык данные, которые приходят от скрипта PHP в скрипт JS уже будут кодированны в uft8 и будут отображаться нормально, если их в PHP перекодить.
Я вообще не трогаю кодировку в js, все в PHP скрипте подготавливаю. Работает отлично.
з.ы. заметил такую фразу "у меня все отлично работает, но у некоторых возникают знаки вопроса вместо текста." ... возможно у некоторых кодировка браузера не та??
Не думаю, кодировка задается на самой странице, а браузер использовали одинаковой версии и даже сборки.
Цитата: 63uK
К сожалению в UTF-8 уже переделать ничего не получится, так как проект на поздней стадии. А каким же образом можно перекодировать в JavaScript симполы?
Пожалуй отвечу второй раз, ибо товарищ действует масштабно, в несколько потоков :)
Что значит, проект в поздней стадии? И чем же это грозит? Он настолько неподдается модернизации? Хороший проект)
Вот тут опять же есть все для преобразования кодировок непосредственно на JS.
Послушайте, что вам пишет Xupypr. Нет смысла доверять обработку кодировка скриптам. Это не очень хороший тон. Самое правильно решение - преобразование кодировки на сервере.
ExtJS
В остальных браузерах - гуд. А вот в опере надо вручную менять кодировку на win2151..
так что таки джаваскриптовая обработка пригодится..
Тоже столкнулся с этим, Опера некоректно отображает символы вин-1251. Ставит вообше исошную кодировку. Юзаю джаваскриптовый фреймворк
В остальных браузерах - гуд. А вот в опере надо вручную менять кодировку на win2151..
так что таки джаваскриптовая обработка пригодится..
вот решение:
В PHP есть функция - header - ручками принудительно шлем кодировку и радуемся жизни, ни каких проблем не возникает.
P.S.> Подсказываю - в хедере шлем кодировку нашей основной страницы. Т.к. Страница делает Аякс запрос скрипту, и скрипт выдает ей не только все в 1251, но и принудительно говорит - что информация в такой-то кодировке.
Думаю люди за полтора года разобрались =)