Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   Проблема с кодировкой XML, AJAX, IE 6 (https://javascript.ru/forum/css-html-internet-explorer/3132-problema-s-kodirovkojj-xml-ajax-ie-6-a.html)

dmitlantis 21.03.2009 00:40

Проблема с кодировкой XML, AJAX, IE 6
 
Всем доброго времени суток.
Столкнулся с серьезной проблемой под IE 6, в Опере и Фоксе всё работает нормально.

Отправляю XML данные аяксом из php скрипта, содержащие русские символы, заголовок установил

header('Content-Type: text/xml; charset=windows-1251');
require('_mysqlconf.php');
	echo '<otvet>';
 echo '<formdata>';  
echo '<data ooption="material" ovalue="5" >Русский текст</data>';
 echo '</formdata>';  
	echo '</otvet>';


в IE результат: alert(xmlhttp.responseXML.documentElement.nodeName ) возвращает ошибку, требующую объект (в других браузерах всё нормально), как я понимаю IE XML документ признаёт невалидным и ответ принимает только в responseText.

Как быть с такой проблемой?

Андрей Параничев 21.03.2009 00:47

Может потому, что не объявлен XML?
echo '<?xml version="1.0" encoding="windows-1251"?>';

dmitlantis 21.03.2009 00:55

XML объявлен заголовком, повторно его объявлять не требуется, без русских символов работает отлично

Kolyaj 21.03.2009 01:07

Сама страница в какой кодировке?

И что за форматирование такое загадочное?

dmitlantis 21.03.2009 01:12

Какое форматирование? Кодировка windows-1251

Kolyaj 21.03.2009 01:23

Цитата:

Сообщение от dmitlantis
Какое форматирование?

Кода в первом сообщении.

Значит остается только вариант, что ИЕ не переваривает cp1251 в xml.
А зачем вам xml? Лишние байты только по сети гоняете. json удобнее во всех смыслах.

dmitlantis 21.03.2009 01:41

Хотелось обойтись без дополнительных библиотек..

Gvozd 21.03.2009 02:27

а разве что-то теперь для работы с JSON надо подключать?
в PHP используютс встроенные json_decode() и json_encode()
а в JS используются три строчки кода
красота, да и только
и излишней информации JSON меньше гоняет

dmitlantis 21.03.2009 11:21

Спасибо!

Gvozd 21.03.2009 12:48

пожалуйста

dmitlantis 21.03.2009 14:18

Попробовал JSON
header('Content-Type: text/plain; charset=windows-1251');
$response = array("formdata"=>"Русский");
	echo json_encode($response);


respobj = eval('('+xmlhttp.responseText+')');
			alert(respobj.formdata)

Во всех браузерах Выводит пустое свойство, проверил полный текст респонса
Код:

{"formdata":null}
- на сервере
Код:

{"formdata": ""}
- на локальном сервере
Что это может означать? Проблема кодировки страницы?

Gvozd 21.03.2009 15:44

вы знаете.
я не сам особо не использовал JSON PHP, поэтому дал немного лодную надежду на простоту.

я сейчас прошерстил пару ресурсов, и выяснил, что под PHP реализация JSON меняется от версии к версии. более того помимо встроенных функций генерации есть еще куча сторонних библиотек
короче говоря не все так просто на стороне ПХП,как мне думалось
что же до конкретно вашего примера, то мне удалось заставть его работать, используя строку не в CP1251, а в UTF-8
при этом строка декодируется в escape-последовательности, которые отлично расшифровываются на стороне сервера

dmitlantis 21.03.2009 15:48

Проблема решена, надоело маяться с придирчивыми стандартными функциями, сделал свой транспорт, всё работает. Как говорится "хочешь 100% работу - сделай сам ;)", а утф 8, пробовал респонс приходит с пустой строкой {"formdata": ""}, как и при 1251...

Gvozd 21.03.2009 15:57

я имел в виду не заголовки с которыми идет, а сама строка должны быть в UTF-8
сохраните скрипт генерирующий в кодировке utf-8
либо используйте iconv()

x-yuri 23.03.2009 03:49

Цитата:

я сейчас прошерстил пару ресурсов, и выяснил, что под PHP реализация JSON меняется от версии к версии
Gvozd, есть разные мнения относительно того, как должны вести себя json_decode/json_encode с данными, отличными от массивов. С другими же проблемами не сталкивался

x-yuri 23.03.2009 04:17

dmitlantis, в соответствии с rfc, строки должны быть в одной из Unicode-кодировок. В мануале это требование указано. Кроме того, там же в комментариях есть решение с помощью iconv - http://ua.php.net/manual/en/function...code.php#72450

Gvozd 23.03.2009 07:52

x-yuri,
и вправду.
лично у меня возникает вопрос, как тогда передавать двоичные данные?
повторюсь, с JSON я общался не сильно тесно, и хтелось бы узнать как оно в таком случае делается

Kolyaj 23.03.2009 11:56

Цитата:

Сообщение от Gvozd
лично у меня возникает вопрос, как тогда передавать двоичные данные?

А зачем с помощью json передавать двоичные данные?

Gvozd 23.03.2009 12:17

да зачем угодно
JSON может использоватся в десятках языках, и поэтому его можно использовать как транспорт между ними.
в JS я слабо представляю задачу тербующую передачи бинарных данных(если не притягивать за уши, и не брать во внимание старые вирусы)
в других языках спокойно можно придумать ряд задач.
вопрос был задан скорее из любопытства.

Kolyaj 23.03.2009 12:39

Цитата:

Сообщение от Gvozd
JSON может использоватся в десятках языках

JSON предназначен для общения с JS, создан таким образом, чтобы раскодирование на стороне JS осуществлялось с помощью eval, интерпретатор JS не умеет парсить бинарные данные.

Если сильно хочется, base64 в помощь.


Часовой пояс GMT +3, время: 15:39.