Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > innerHTML и кириллица


Автор: sidd 26.7.2008, 01:44
У меня через innerHTML в div вставляется некоторый текст. Но если вставлять кириллицу, то кодировка ломается. Вместо нужного текста отображается что-то типа такого: Видео. Кодировки этого текста и самой страницы одинаковые — CP1251. Причем это происходит только в Опере, в Firefox'е все нормально. С помощью Декодера Лебедева выяснил, что это строка, переведенная UTF-8. Почему же Opera его переводит в UTF? И как это можно исправить?

Автор: 12345c 26.7.2008, 02:26
Не могли бы Вы выложить пример? Никто же не будет сам воспроизводить дефект.

Автор: bars80080 26.7.2008, 08:45
у меня подобная вещь была при обмене с сервером запросами аякс. причём на всех браузерах и по разному, притом и запросы на кирилице тоже сбивалась кодировка
удалось исправить системой конвертации. в общем случае rawurlecode(); на стороне сервера и decodeURIComponent() на клиенте

Автор: skyboy 26.7.2008, 09:16
Цитата(bars80080 @  26.7.2008,  07:45 Найти цитируемый пост)
причём на всех браузерах и по разному

разве - по-разному? мне помнится, что xmlhttprequest всегда идет в utf-8...

Автор: bars80080 26.7.2008, 15:06
да чёрт его знает, как оно там было. просто в одном случае ИЕ работал, в другом ФФ
вообще там получилась целая лесенка: запрос-encodeURIComponent-(сервер: rawurldecode-iconv(utf-8, cp1251)-выборка-iconv(cp1251,utf-8)-rawurlencode)-decodeURIComponent
каким макаром он возвращает это всё в кирилицу вин-1251 в итоге - не знаю, но работает

Автор: sidd 26.7.2008, 19:01
Я, кажется, понял, из-за чего глюк происходит. Написал отдельно вот такую вот страничку со скриптом:
Код
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=cp1251">
  <script language="javascript">
    function test(text) {
      elem = document.getElementById('test');
      elem.innerHTML = text;
    }
  </script>
</head>
<body>
<div id="test"></div>
<a href="javascript: test('блаблабла');">test</a>
</body>
</html>

В результате при клике на ссылку test, в div вставляется строка с поломаной кодировкой.
Но если в div вставлять не переменную text, которая передается функции, а присвоить текст напрямую, вот так:
Код

elem.innerHTML = 'блаблабла';

то тогда работает. И так тоже работает:
Код
text = 'блаблабла'
elem.innerHTML = text;

Короче, глюк происходит, если передавать переменную при вызове функции. В моем случае как раз так и сделано.

Автор: Sanchezzz 28.7.2008, 07:12
самопальный AJAX по умолчанию использует utf-8

пользуйся jshttprequest гемора меньше поддерживает перекодирование... + крос-браузерный.

Автор: Viroman 28.7.2008, 17:06
А как насчёт такого подхода, просто у меня оба варианта под оперой работают, даже твой.
Код


<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=cp1251">
  <script language="javascript">
    var testtext="";
    function test() {
      elem = document.getElementById('test');
      elem.innerHTML = testtext;
    }
  </script>
</head>
<body>
<div id="test"></div>
<a href="javascript: testtext='блабля',test();">test</a>
</body>
</html>

Автор: sidd 28.7.2008, 21:19
Цитата
пользуйся jshttprequest гемора меньше поддерживает перекодирование... + крос-браузерный.

Ок, попробую.

Viroman, нет, так тоже не работает. Может, у вас просто на странице кодировка UTF-8 установлена?

Автор: Sanchezzz 29.7.2008, 06:14
а по чему у вас  так 
Цитата

<meta http-equiv="Content-Type" content="text/html; charset=cp1251">

должно быть вот так  
Код

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)