| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Вёрстка веб-сайтов > Как подружить IE с UTF-8 |
| Автор: SkyHawk 5.5.2011, 12:49 | ||||
| Народ! Помогите! Уже несколько дней бьюсь с данной проблемой! В-общем, так. Решил в своем внутреннем портале использовать JSON (альтернатива XML). Все бы ничего, но JSON работает с данными только в формате UTF-8. ОК, переходим на UTF-8 (раньше все было на win-1251). Однако при работе с utf-8 глючит ослик! Привожу два файла - клиентская часть, и серверная. Клиент:
Сервер:
Суть в следующем. Клиентом через Ajax отправляются значения, указанные в переменной Val, серверу. Сервер парсит эту переменную, создает массив, и передает обратно клиенту, преобразовав в JSON-формат. Клиент должен принять, и выдать сообщением значения всех полученных переменных. Функции SendAjaxQueryJSON и serverReplyJSON созданы для универсализации - в дальнейшем будут использоваться как модуль, и тупо подключаться везде, где нужна работа с JSON через Ajax. Так вот. При работе БЕЗ кириллических символов все ОК. Но, когда в переменной Val есть кириллица - во всех браузерах работает нормально, кроме Ослика! Ослик работает, только если насильно указать кодировку Windows-1251 в настройках (можете проверить сами). В чем проблема, что я делаю не так, и как можно побороть данную траблу? |
| Автор: ReFleX 5.5.2011, 16:57 |
Недеюсь сам файл сохранён с кодировкой UTF-8?![]() |
| Автор: bars80080 5.5.2011, 17:37 |
| на ютф-8 ничего не глючит. скорее всего, у вас на одной из сторон где-то осталась кодировка cp1251 |
| Автор: SkyHawk 5.5.2011, 18:22 |
| Именно в utf-8 сохранены и клиент, и сервер. Ранее были сохранены в windows-1251, но потом я преобразовал оба файла в Notepad++ именно в utf-8. У вас все нормально работает? Или нет? Если в хидере указан utf-8, глючит IE. Если же указать windows-1251, то ослик начинает нормально принимать, но начинает глючить Файрфокс. У меня эти две Ajax-функции находятся в отдельном файле .js (здесь я для удобства вписал их в тело клиента), он по умолчанию сохранен в вин-1251, и присоединяются динамически, но там вроде бы нет кириллических символов. Неужели из-за этого файла тоже могут быть проблемы? |
| Автор: ksnk 5.5.2011, 18:59 | ||
а хидеры установлены в запросах? Их достаточно просто посмотреть в панели отладки JS для любого вменяемого броузера (IE в том числе ;))
Вообще-то не обязательно выдавать сервером данные именно в utf. Достаточно указать корректный заголовок. Вот приходящие данные довольно сложно кроссбраузерно уложить в нужную кодировку и все рекомендации обычно оканчиваются utf-8... |
| Автор: SkyHawk 6.5.2011, 09:30 | ||||
| Уфф. Частично разобрался. Поставил на IE DebugBar, просмотрел с помощью него отправляемый запрос, сравнил с запросом Firefox'а. Оказалось, параметр val в строке запроса выглядит по разному. в фоксе - байт-кодом, в ослике - набором кракозябр. Далее в серверном скрипте "поставил логгер" - вывел в текстовый файл значение параметра val. Так и вышло - Firefox и Internet Explorer посылают запросы в разных кодировках. После запроса фокса скрипт сохранил текст в кодировке utf-8. А после запроса IE - в windows-1251. А теперь, внимание, вопрос: КАК заставить ослик посылать GET-запрос именно в формате UTF-8? Еслю ставлю php-хидер:
то нормально работает фокс, ослик шлёт на сервер гадость. Если ставлю мета-тег:
то наоборот, ишак нормально работает, а вот лис шлёт на сервер фигню. Если же ставлю оба значения (и мета-тег, и хидер), то приоритет имеет php-хидер, и повторяется первый вариант. Что делать? Знающие, подскажите! |
| Автор: ReFleX 6.5.2011, 09:48 |
| В ASP.NET есть метод Server.UrlEncode который специально используется для того чтобы передавать к примеру русский текст в url, он заменяет к примеру пробел на %20 Ищи подобную тему в PHP Да, кстати точно, на сколько я помню IE не умеет читать русские буквы в адресной строке, может уже в 9 это исправили... Добавлено через 50 секунд Вроде бы даже в JS я тоже как то видел подобный метод |
| Автор: SkyHawk 6.5.2011, 13:21 |
| Есть! Добил я эту траблу! ReFleX, спасибо тебе за подсказку! Навел на верный путь! Прибавляю + к твоей репутации. Всем остальным может в дальнейшем понадобиться - занесите себе в копилку. Справился так. Чтобы избавиться от кириллицы, строку запроса кодирую с помощю js-функции encodeURIComponent(Val), которая преобразовывает всю строку в байт-код. В противоположность ей (для раскодирования) в точности соответствует php-функция urldecode($val), с помощью которой я и получаю исходную строку! Во всех основных браузерах (проверял на IE6, IE8, Google Chrome 10, Opera 9, Mozilla Firefox 3.6) работает на ура! Блин, вот реально ступил! Надо было сразу ковырять в сторону кириллического шрифта в строке запроса, и кодировать его. Правду говорят, век живи - век учись, и дураком помрёшь. Всем спасибо! Тема закрыта. |
| Автор: Pena 27.1.2015, 13:03 |
| Дядиньки, а неужели надо перелопачивать все ссылки и urlencod-ить их. Неужели нельзя написать jQuery функцию (запускающуюся после загрузки страницы) которая бы искала все ссылки на странице и encodeURIComponent-ила их? =\ |