![]() |
Модераторы: Illuminaty |
![]() ![]() ![]() |
|
SkyHawk |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 17.8.2006 Где: г. Новосибирск Репутация: нет Всего: 2 |
Народ! Помогите! Уже несколько дней бьюсь с данной проблемой!
В-общем, так. Решил в своем внутреннем портале использовать JSON (альтернатива XML). Все бы ничего, но JSON работает с данными только в формате UTF-8. ОК, переходим на UTF-8 (раньше все было на win-1251). Однако при работе с utf-8 глючит ослик! Привожу два файла - клиентская часть, и серверная. Клиент:
Сервер:
Суть в следующем. Клиентом через Ajax отправляются значения, указанные в переменной Val, серверу. Сервер парсит эту переменную, создает массив, и передает обратно клиенту, преобразовав в JSON-формат. Клиент должен принять, и выдать сообщением значения всех полученных переменных. Функции SendAjaxQueryJSON и serverReplyJSON созданы для универсализации - в дальнейшем будут использоваться как модуль, и тупо подключаться везде, где нужна работа с JSON через Ajax. Так вот. При работе БЕЗ кириллических символов все ОК. Но, когда в переменной Val есть кириллица - во всех браузерах работает нормально, кроме Ослика! Ослик работает, только если насильно указать кодировку Windows-1251 в настройках (можете проверить сами). В чем проблема, что я делаю не так, и как можно побороть данную траблу? Это сообщение отредактировал(а) SkyHawk - 5.5.2011, 13:42 --------------------
Быть может все, что может быть, И даже то, что быть не может. |
||||
|
|||||
ReFleX |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 499 Регистрация: 26.9.2004 Где: Таллинн Репутация: 1 Всего: 3 |
Недеюсь сам файл сохранён с кодировкой UTF-8?
![]() |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 50 Всего: 315 |
на ютф-8 ничего не глючит. скорее всего, у вас на одной из сторон где-то осталась кодировка cp1251
|
|||
|
||||
SkyHawk |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 17.8.2006 Где: г. Новосибирск Репутация: нет Всего: 2 |
Именно в utf-8 сохранены и клиент, и сервер. Ранее были сохранены в windows-1251, но потом я преобразовал оба файла в Notepad++ именно в utf-8. У вас все нормально работает? Или нет?
Если в хидере указан utf-8, глючит IE. Если же указать windows-1251, то ослик начинает нормально принимать, но начинает глючить Файрфокс. У меня эти две Ajax-функции находятся в отдельном файле .js (здесь я для удобства вписал их в тело клиента), он по умолчанию сохранен в вин-1251, и присоединяются динамически, но там вроде бы нет кириллических символов. Неужели из-за этого файла тоже могут быть проблемы? --------------------
Быть может все, что может быть, И даже то, что быть не может. |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 48 Всего: 386 |
а хидеры установлены в запросах? Их достаточно просто посмотреть в панели отладки JS для любого вменяемого броузера (IE в том числе ;))
Вообще-то не обязательно выдавать сервером данные именно в utf. Достаточно указать корректный заголовок. Вот приходящие данные довольно сложно кроссбраузерно уложить в нужную кодировку и все рекомендации обычно оканчиваются utf-8... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
SkyHawk |
|
||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 17.8.2006 Где: г. Новосибирск Репутация: нет Всего: 2 |
Хидеры указываю и в клиенте, и на сервере так:
Если указать, как выше, то Firefox показывает нормально, а IE выдаёт вместо кириллических символов null. Если указать windows-1251, то наоборот IE показывает нормально, а Firefox отображает некорректно кириллические символы. Заголовки запроса (при указанном выше хидере):
Заголовки ответа:
Посмотрел в Мозилле firebug'ом. А как в IE 8 посмотреть заголовки?... В "Сервис -> Средства разработчика" не нашел ничего нужного...
Ну так я и указываю хидером корректный заголовок. Нет? Так что делать-то?... Это сообщение отредактировал(а) SkyHawk - 6.5.2011, 05:47 --------------------
Быть может все, что может быть, И даже то, что быть не может. |
||||||||
|
|||||||||
SkyHawk |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 17.8.2006 Где: г. Новосибирск Репутация: нет Всего: 2 |
Уфф. Частично разобрался.
Поставил на IE DebugBar, просмотрел с помощью него отправляемый запрос, сравнил с запросом Firefox'а. Оказалось, параметр val в строке запроса выглядит по разному. в фоксе - байт-кодом, в ослике - набором кракозябр. Далее в серверном скрипте "поставил логгер" - вывел в текстовый файл значение параметра val. Так и вышло - Firefox и Internet Explorer посылают запросы в разных кодировках. После запроса фокса скрипт сохранил текст в кодировке utf-8. А после запроса IE - в windows-1251. А теперь, внимание, вопрос: КАК заставить ослик посылать GET-запрос именно в формате UTF-8? Еслю ставлю php-хидер:
то нормально работает фокс, ослик шлёт на сервер гадость. Если ставлю мета-тег:
то наоборот, ишак нормально работает, а вот лис шлёт на сервер фигню. Если же ставлю оба значения (и мета-тег, и хидер), то приоритет имеет php-хидер, и повторяется первый вариант. Что делать? Знающие, подскажите! --------------------
Быть может все, что может быть, И даже то, что быть не может. |
||||
|
|||||
ReFleX |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 499 Регистрация: 26.9.2004 Где: Таллинн Репутация: 1 Всего: 3 |
В ASP.NET есть метод Server.UrlEncode который специально используется для того чтобы передавать к примеру русский текст в url, он заменяет к примеру пробел на %20
Ищи подобную тему в PHP Да, кстати точно, на сколько я помню IE не умеет читать русские буквы в адресной строке, может уже в 9 это исправили... Добавлено через 50 секунд Вроде бы даже в JS я тоже как то видел подобный метод |
|||
|
||||
SkyHawk |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 17.8.2006 Где: г. Новосибирск Репутация: нет Всего: 2 |
Есть! Добил я эту траблу!
ReFleX, спасибо тебе за подсказку! Навел на верный путь! Прибавляю + к твоей репутации. ![]() Всем остальным может в дальнейшем понадобиться - занесите себе в копилку. Справился так. Чтобы избавиться от кириллицы, строку запроса кодирую с помощю js-функции encodeURIComponent(Val), которая преобразовывает всю строку в байт-код. В противоположность ей (для раскодирования) в точности соответствует php-функция urldecode($val), с помощью которой я и получаю исходную строку! Во всех основных браузерах (проверял на IE6, IE8, Google Chrome 10, Opera 9, Mozilla Firefox 3.6) работает на ура! Блин, вот реально ступил! Надо было сразу ковырять в сторону кириллического шрифта в строке запроса, и кодировать его. Правду говорят, век живи - век учись, и дураком помрёшь. ![]() Всем спасибо! Тема закрыта. --------------------
Быть может все, что может быть, И даже то, что быть не может. |
|||
|
||||
Pena |
|
|||
![]() КорнеплодЪ ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 20.4.2006 Где: эРэФия, аул Москв а... Репутация: нет Всего: нет |
Дядиньки, а неужели надо перелопачивать все ссылки и urlencod-ить их. Неужели нельзя написать jQuery функцию (запускающуюся после загрузки страницы) которая бы искала все ссылки на странице и encodeURIComponent-ила их? =\
--------------------
Самовар по всем вопросам - сильно не ругайте |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Вёрстка веб-сайтов | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |