![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
flashaa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 2 Всего: 25 |
Может быть вы подскажете, почему при получении запроса от стороннего скрипта (AJAX) и вставке его ответа как innerHTML в браузерах опера и ИЕ кодировки ответа оказываются разные, но обе неверные. При чем такая ошибка только при работе с аяксом. Если открыть скрипт отдельно, он показывает вменяемую информацию в обоих браузерах.
Скрипт берет информацию из БД Это сообщение отредактировал(а) mishaSL - 29.6.2007, 17:02 |
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 9 Всего: 146 |
flashaa, вообще-то при использовании AJAX лучше использовать кодироку utf-8. Т.е. перед работой с БД выполняете запрос "SET NAMES 'utf8'" и прописваете в XML <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|||
|
||||
flashaa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 2 Всего: 25 |
А можете более подробно?
Т.е. и перед сохранением и перед извлечением данных из бд делать запрос "SET NAMES 'utf8'" ? А <?xml version="1.0" encoding="UTF-8" standalone="yes"?> - это надо прописать в тело страницы, которая будет получать запросы через AJAX ? |
|||
|
||||
flashaa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 2 Всего: 25 |
Я понял вас, сделал так, но теперь почемуто правильно видны только данные из ОПЕРЫ - при чем правильно в обоих браузерах видны. А данные из ИЕ в обоих браузерах - белиберда.
Значит так: при выводе через xml и переводе скриптовых данных в utf-8 правильно отображаются сторонние данные(которые не были приняты через АЯКС). в других случаях эти данные неправильны во всех браузерах. значит надо оставить utf как кодировку вывода скрипта. Теперь: данные, принятые через аякс отображаются в браузерах по разному! при приеме они проходят перекодировку из utf-8 в windows-1251 . О чем это может говорить? Это сообщение отредактировал(а) flashaa - 29.6.2007, 03:54 |
|||
|
||||
flashaa |
|
||||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 2 Всего: 25 |
Значит работает скрипт чата, который состоит из страницы с JS-кодом, изначально генерируемой через PHP и ещё одного PHP-скрипта, который выводит новые данные.
В качестве GET-параметра php- скрипту передается номер чатовой комнаты при обновлении, а так же AJAX передает скрипту данные от пользователя для добавления в БД. (JS-код в самом конце поста) запрашиваемый скрипт выводит (echo) все внутреннее представление чата. Кодировка самой страницы windows-1251. Теперь сама проблема: скрипт работает нормально при первой загрузке (без AJAX). Но когда подключаю AJAX вот тут и начинаются проблемы с кодировкой. Это просто тупик. Просмотрел множество решений. Например, 1) принудительное задание кодировки в выводе, 2) использование xml
3)перекодирование при сохранении в базу
4)перекодирование при извлечении из базы
В итоге получается взаимоисключающий результат: либо корректно отображается в Опере, либо в ИЕ, либо изначально правильно либо после обновления через AJAX.. В итоге не получается чтобы ВСЕ было правильно всегда и везде. Читал про то, что AJAX нормально работает если сама страница которая обновляется будет в кодировке utf-8, но для меня это невозможно. Помогите... Яваскрипт в обновляемой странице:
Это сообщение отредактировал(а) flashaa - 29.6.2007, 15:17 |
||||||||
|
|||||||||
mishaSL |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1046 Регистрация: 10.1.2007 Где: Санкт-Петербург Репутация: 7 Всего: 54 |
flashaa, если вы используете кодировку windows-1251 и нет возможности перейти на utf-8, то тогда кодировка windows-1251 должна быть везде:
1. поставьте заголовок header("Content-type: text/html; charset=windows-1251"); и в основном файле который выводит информацию и в файлах show_chat.php и т.д. которые грузятся через Ajax. Плюс желательно добавите еще следующие заголовки в файлы подгружаемые через ajax:
2. После соединения с БД выполните запрос : mysql_query("set names cp1251"); этот запрос поставьте после всех соедитений с БД (если их несколько) 3. в данном случае не надо использовать iconv и так все должно работать. -------------------- Лучший способ научиться программированию - это посмотреть как это делают другие... |
|||
|
||||
flashaa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 2 Всего: 25 |
mishaSL, спасибо, но указанный вами метод (обе страницы в windows-1251) я уже пробовал, результат в моем посте такой, что в этом случае абсолютно все данные( и сохраненные в бд через АЯКС и без него) искажаются в обоих браузерах.
Правда я не использовал запрос mysql_query("set names cp1251"), попробую с ним. Это сообщение отредактировал(а) flashaa - 29.6.2007, 17:35 |
|||
|
||||
mishaSL |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1046 Регистрация: 10.1.2007 Где: Санкт-Петербург Репутация: 7 Всего: 54 |
Попробуйте, точно должно работать. Проверено неоднократно. -------------------- Лучший способ научиться программированию - это посмотреть как это делают другие... |
|||
|
||||
flashaa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 2 Всего: 25 |
Спасибо большое! Решение действительно оказалось в этом запросе!
|
|||
|
||||
mishaSL |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1046 Регистрация: 10.1.2007 Где: Санкт-Петербург Репутация: 7 Всего: 54 |
Всегда пожалуйста.
![]() Т.к. вы новичек на форуме, напоминаю: когда вопрос решен у первого поста в топике есть возможность пометить "вопрос решенным". -------------------- Лучший способ научиться программированию - это посмотреть как это делают другие... |
|||
|
||||
flashaa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 2 Всего: 25 |
Странно, но снова появилась проблема.
Теперь вот как: все сообщения, ОТПРАВЛЕННЫЕ В БАЗУ из Оперы видны неверно, а сообщения из ИЕ - верно..
Членистоногий пишет из Оперы, Подмышка из ИЕ. В обоих браузерах выглядит вот так. Строку mysql_query("set names cp1251") добавил в файл db_connect.php, который выполняет подключение и селекцию БД, т.е. теперь после каждого подключения гарантировано идет этот разпрос... ![]() Судя по результатам смены кодировки в опере, опера получает строку в Unicode ![]() ![]() Это сообщение отредактировал(а) flashaa - 30.6.2007, 06:41 |
|||
|
||||
sTa1kEr |
|
||||||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 9 Всего: 146 |
Скорее всего Опера и FF через AJAX возвращает данные в UTF-8 вне зависимости от используемой кодировки. В данном случае лучше всего использовать mbstrings, т.к. UTF-8 от одно-байтовых кодировок он умеет отличать.
Или так
|
||||||
|
|||||||
flashaa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 2 Всего: 25 |
С использованием двух последних приемов теперь в обоих браузерах вместо любых букв - как русских, так и не русских - пустота. МОжет быть можно как-то переконвертировать в ява-скрипте? И может ли кто-нибудь бросить рабочий пример хтмл+аякс - пхп, чтобы кодировка страницы была win-1251. Пока я видел пример только в UTF-8
|
|||
|
||||
flashaa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 2 Всего: 25 |
Заменил
mysql_query("set names cp1251") на mysql_query("set names utf8") + при запросе аякса добавил JS-фукнцию encodeURIComponent() от передаваемого текста и теперь все отображается, так и знал, что надо ещё в js эту строку подготовить к отправке,ибо каждый браузер ее по своему представляет ![]() Это сообщение отредактировал(а) flashaa - 1.7.2007, 00:12 |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |