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


Автор: Alex_B 10.7.2007, 11:16
Использую вот такую библиотеку:
http://www.dynamicdrive.com/dynamicindex17/ajaxcontent.htm
для загрузки контента в стиле Ajax.

Но уменя подгружаемое содержимое в кодировке windows-1251 и в замен символов я получаю одни вопросы ?????, я знаю что текст должен быть в UTF-8, но я не могу изменить кодировку на стороне сервера.

Есть какая-нибудь возможность решить эту проблему?

Автор: dstorm81 10.7.2007, 16:32
проблем с кодировкой не длжно быть если
сам файл [index.php] сохранен в кодировке utf-8
заголовок документа und header utf-8
все скрипты приаттаченные сохранены в utf-8
источник выдаёт инфу в utf-8

вобщем возможность, отказаться от 1251 кодировки

Автор: Kolyaj 11.7.2007, 14:25
Настройте сервер или скрипты так, чтобы явно выдавался заголовок "Content-type: text/html; charset=windows-1251".

Автор: Alex_B 12.7.2007, 16:49
dstorm81, Kolyaj, спасибо.

Т.е. без каких-либо изменений на сервере решить проблемы с кодировкой невозможно?

Автор: Kolyaj 13.7.2007, 09:28
Цитата(Alex_B @  12.7.2007,  16:49 Найти цитируемый пост)
Т.е. без каких-либо изменений на сервере решить проблемы с кодировкой невозможно?

Нет, в любом случае хотя бы в одном браузере будут крякозябры. Как я понял, у вас доступ к серверу есть. По идее должно быть достаточно прописать в корневом файле .htaccess директиву
Код

AddDefaultCharset windows-1251

Автор: Alex_B 13.7.2007, 12:42
Kolyaj, спасибо.

Автор: szz 20.7.2007, 07:33
Итак )))
Какой язык у тебя на сервере?

Я просто сам недавно сталкивался с этим, и написал свою мальенькую библиотечку на РНР, с помощью которой я на клиенте ставлю UTF-8, а на серваке перевожу его в win-1251, и обратно, с сервера перевожу win в utf.

Библиотечка расширяема, можно кроме русского win-1251 добавлять любые другие кодировки русского и других языков, например я пробовал визуальную и логическую иврита - работает.

Дать?

Автор: dsCode 9.9.2007, 17:34
JavaScript при AJAX'e работает в UTF-8 (по-любому). Но вовсе не обязательно писать сами файлы в UFT-8. А как быть, если надо данные в базу положить, которая в 1251?

Если Вы используете PHP, то Вам пожет функция iconv("UFT-8", "cp1251", $data)

Автор: bronenos 10.9.2007, 19:10
или mb_convert_encoding, но в ней параметры надо задать обратным порядком

Автор: szz 11.9.2007, 03:36
dsCode, иконв не везде есть, впрочем, на юниксах всегда, а вот на винде нет.
А моя самописная библиотека будет работать везде, правда, по скорости она с иконв не сравнится конечно.

bronenos, мб еще хуже чем иконв использовать, потому что он not enabled by default.

но так или иначе, строку, которую нам присылает JS  надо еще подготовить, ведь она не реальная UTF-8, а url-закодированная, с процентиками перед каждой буквой.
Мало того, ведь буквы премиум таблицы не кодируются, так что надо аккуратно перевести эту строку в utf8 и urlencode, rawurlencode тут не помогут.

Автор: bronenos 11.9.2007, 09:39
Код

function ajax_encode (value)
{
  value = escape(value);
  var utf, win, pos=value.indexOf("%u");
  while (pos > -1)
  {
    utf = value.substring(pos, pos+6);
    win = "%" + ("BCDEF").charAt(utf.charAt(4)) + utf.charAt(5);
    value = value.replace(utf, win);
    pos = value.indexOf("%u");
  }
  return value;
}

Автор: dsCode 11.9.2007, 10:56
szz, да, согласен насчет iconv, хотя, сейчас, по-моему, везде он есть уже.

P.S.: было бы интересно посмотреть на Вашу библиотеку. Я просто в свое время поленился писать =) К тому же потом нашелся icov =).

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