|
|
|
| Когда отправляю некий текст на сервер с помощью XMLHttpRequest из поля, а потом его отправляю в браузер обратно в XML, то получаются кракозябры.
В браузере стоит, например windows-1251 и в XML ставлю то же
<?xml version="1.0" encoding="windows-1251" standalone="yes"?>
|
Причем такая проблема только с Оперой.
Если кто сталкивался, подскажите, что делать? Я новичок в аяксе, может чего и сам напутал. Или это глюк оперы? :-( | |
|
|
|
|
|
|
|
для: WebTech
(06.09.2006 в 15:46)
| | Проблема должна быть со всеми бр-рами, потому что Ajax работает только c UTF-8. Поищите по стовам "кодировка Ajax кириллица" | |
|
|
|
|
|
|
|
для: 12345
(06.09.2006 в 16:26)
| | У меня тоже получались кракозяблики при encoding=windows-1251 пока не поменял ее на UTF-8 и xml-файл не сохранил в UTF-8 Тогда проблемы отпали.
"...а потом его отправляю в браузер обратно в XML..."
Не могли бы вы показать на небольшом примере, как это делается? А то я только responseText понимаю, а как с responseXML работать- не представляю. Вы ведь здесь именно это свойство используете, да? | |
|
|
|
|
|
|
|
для: coloboc66
(06.09.2006 в 17:19)
| | Разбор дерева DOM.
http://www.webreference.com/programming/javascript/jf/column12/index.html - How to Develop Web Applications with Ajax
http://www.sitepoint.com/article/remote-scripting-ajax :
Parsing the Data in an XMLHttpRequest Object
If we've made a successful request, two properties of the XMLHttpRequest object may contain data:
responseXML stores a DOM-structured object of any XML data that was retrieved by the object. This object is navigable using the standard JavaScript DOM access methods and properties, such as getElementsByTagName(), childNodes[ ] and parentNode.
responseText stores the data as one complete string. If the content type of the data supplied by the server was text/plain or text/html, then this is the only property that will contain data. A copy of any text/xml data will be flattened and placed here as an alternative to responseXML.
Depending upon the complexity of the data, it may be easier to return data simply as a plain text string, thereby making the XML in XMLHttpRequest redundant. However, for more complex data types, you'll probably want to use an XML format, such as this:
<?xml version="1.0" ?>
<user>
<name>John Smith</name>
<email>john@smith.com</email>
</user>
|
We are able to access different parts of the data using standard DOM access methods. Remember that data contained between tags is considered to represent child text nodes of the parent, so we have to take that extra layer of structure into account when we retrieve the data:
var nameNode = requester.responseXML.getElementsByTagName("name")[0];
var nameTextNode = nameNode.childNodes[0];
var name = nameTextNode.nodeValue;
|
We must also be careful about whitespace: indenting values in the XML file may produce unwanted whitespace in the value, or add additional text nodes.
----------------------------------------
Работа с Dom: http://javascript.aho.ru/files/article-DOM.htm
----------------------------------------
"Подгрузка XML и последующее чтение его в JS" (обсуждение одного кода) : | |
|
|
|
|
|
|
|
для: coloboc66
(06.09.2006 в 17:19)
| | XML создаю на сервере в PHP
<?php
header ('Content-Type: text/xml');
// заголовок XML
echo '<?xml version="1.0" encoding="windows-1251" ?>';
echo '<response>';
// здесь просто текст
echo '</response>';
?>
|
А разбираю потом следующим образом
res = request.responseXML;
doc_el = res.documentElement;
message = doc_el.firstChild.data;
// дальше вывод
|
Я пробовал ставить UTF-8 - получаются кракозябры в любом браузере. А если поставить koi или windows-1251, то IE и фокс нормально все показывают, а опера нет. | |
|
|
|
|
|
|
|
для: 12345
(06.09.2006 в 16:26)
| | - | |
|
|
|
|
|
|
|
для: WebTech
(06.09.2006 в 18:20)
| | А попробуйте в файле РНР вот это поставить, может- поможет...
header("Content-type: text/html; charset=windows-1251");
|
Нужно ставить вверху файла перед всеми операторами. | |
|
|
|
|
|
|
|
для: coloboc66
(07.09.2006 в 09:17)
| | Решил проблему с оперой. Оказывается я писал код в ANSI :-) Перекодировал все в UTF-8 и в опере заработало! Текст стал правильно отображаться. Зато в фоксе испортилось :-( Я ничего не понимаю.
Как вообще надо расставлять эти кодировки? В браузере какой charset надо выставлять?
Может быть мне прислать код полностью? | |
|
|
|
|
|
|
|
для: WebTech
(07.09.2006 в 18:27)
| | Я думаю- в html и РНР-док-е надо ставить windows-1251, а в xml-док-е надо ставить UTF-8 и сохранять его в UTF-8. | |
|
|
|
|
|
|
|
для: coloboc66
(07.09.2006 в 20:47)
| | У меня XML формируется динамически скриптом. Как его можно сохранить в UTF?
<?php
$name = $_GET['name']; // передается из браузера с помощью XMLHttpRequest
header ('Content-Type: text/xml');
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<response>';
echo 'Некий текст, который формируется динамически'.$name;
echo '</response>';
?>
|
Это мой скрипт, который формирует ответ в XML. Дело в том, что вот эта $name выглядит потом в браузере кракозябрами, а строка "Некий текст, который формируется динамически" выглядит нормально. | |
|
|
|
|
|
|
|
для: WebTech
(08.09.2006 в 10:29)
| | "Как его можно сохранить в UTF?"(динамически)- а вот это сложный вопрос. Может 12345 знает? А в РНР у вас стоит вот это?
header("Content-type: text/xml; charset=windows-1251");
|
И в html- файле 1251 тоже... | |
|
|
|
|
|
|
|
для: coloboc66
(08.09.2006 в 10:32)
| | Динамически его не хранят, а генерируют. Если переменная содержит с-1251, а выдаётся в UTF, то конечно, будет несоответствие. Очевидный вывод - надо перекодировать при выдаче. (Или хранить в UTF.) То, что константа идёт правильно - понятно, она или прекодируется автоматически, или страница файла PHP в UTF-е. Все вопросы про кодировку упираются в необходимость иметь функцию перекодировки, посмотрите здесь на форуме (в этой теме уже советовал, 2-й пост). | |
|
|
|
|
|
|
|
для: 12345
(08.09.2006 в 14:17)
| | Проблема решилась :-)
В браузерном скрипте отправляемые данные закодировал с помощью encodeURIComponent(). На стороне сервера никаких перекодировок не использовал. И во всех браузерах теперь все правильно отображается :-)
Всем спасибо огромное! :-) | |
|
|
|
|
|
|
|
для: WebTech
(08.09.2006 в 17:53)
| | encodeURIComponent()- это что- метод ява-скрипт? Или что? В моем справочнике про это нет ничего... Все-равно не ясно, почему решилась проблема с кодировкой- серверный скрипт ведь никак не зависит от браузерного. Или у вас сервер получает данные в кириллице (обработанной с помощью encodeURIComponent), обрабатывает их и ответные данные тоже выдает в кириллице? Тогда объяснимо.
Вот это ваше $name- оно в кириллице, да? И в браузере вы делаете примерно так:
var name='Имя';
name=encodeURIComponent(name);
document.forms(0).name.value=name;
|
И это имя отсылаете, да? | |
|
|
|
|
|
|
|
для: coloboc66
(09.09.2006 в 22:57)
| | Да, все так, как вы описали.
EncodeURIComponent - это функция JavaScript, которая кодирует строку, как компонент URL, т.е. некоторые символы в управляющие последовательности.
Я думаю, что кириллица в UTF как раз и должна быть закодирована для безопасной передачи.
Хотя может быть и ошибаюсь. Но так все работает :-)
http://www.w3schools.com/jsref/jsref_encodeURIComponent.asp | |
|
|
|