Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: SimpleXml. Проблема с кодировкой.
 
 автор: AntonE   (15.10.2008 в 06:30)   письмо автору
 
 

Здраствуйте.
Подскажите пожалуйста, как правильно сделать отображение кирилицы в xml документе при использовании SimpleXml.
Например, делаю так:
header("Content-type: text/xml");
...
$dataXML = simplexml_load_string("<?xml version='1.0' encoding='windows-1251'?><doc></doc>");
$dataXML->addChild('name', 'Антон');
echo $dataXML->asXML();

Выдает ошибку...
Если изменить:
$dataXML->addChild('name', 'Anton');

Всё нормально.
Пробовал и koi8-r и iso-8859-5 - тоже ошибки.
Я что-то не так делаю или чего не понимаю?

  Ответить  
 
 автор: Саня   (15.10.2008 в 21:28)   письмо автору
 
   для: AntonE   (15.10.2008 в 06:30)
 

А UTF-8 пробовали?

  Ответить  
 
 автор: AntonE   (15.10.2008 в 22:57)   письмо автору
 
   для: Саня   (15.10.2008 в 21:28)
 

А разве без utf-8 нельзя обойтись?.

Вроде бы вопрос простой, а ответа пока нет :(
Ребята, ну помогите, пожалуйста!

Еще раз. Вот, например, есть xml-документ:
<?xml version='1.0' encoding='windows-1251'?>
<person>
    <name>Вася</name>
    <family>Пупкин</family>
</person>


Загружаю документ и если добавляю новый узел, то выдает ошибку.
$dataXML = simplexml_load_file('fileName.xml');
$dataXML->addChild('newElem', 'Новый');
echo $dataXML->asXML();

Почему ошибка?
Если вместо "Новый", поставить, допустим "New", тогда всё хорошо.
Может надо как-то обработать сначала или еще что-нибудь сделать?
Подскажите пожалуйста.

  Ответить  
 
 автор: Trianon   (15.10.2008 в 23:27)   письмо автору
 
   для: AntonE   (15.10.2008 в 22:57)
 

>А разве без utf-8 нельзя обойтись?.
>Вроде бы вопрос простой, а ответа пока нет :(

Так и ответ простой. Штатная кодировка XML-контента - именно UTF-8 . Остальное от лукавого, и никем не гарантировано.

  Ответить  
 
 автор: #   (16.10.2008 в 00:24)
 
   для: Trianon   (15.10.2008 в 23:27)
 

А зачем тогда вообще атрибут "encoding"?

  Ответить  
 
 автор: AntonE   (16.10.2008 в 04:24)   письмо автору
 
   для: Trianon   (15.10.2008 в 23:27)
 

Хорошо, будем тогда использовать UTF.
Но сразу возникла другая проблема.
Вот если я создаю файл xml в utf-8 кодировке, а в файле xsl стоит <xsl:output encoding='windows-1251'>, то результат же должен быть в windows-1251 кодировке?
Но у меня всеравно результат преобразования UTF-8.
Что за беда с этими кодировками :(

  Ответить  
 
 автор: coloboc66   (16.10.2008 в 10:30)   письмо автору
 
   для: AntonE   (16.10.2008 в 04:24)
 

Вам же сказали:
"Так и ответ простой. Штатная кодировка XML-контента - именно UTF-8 . Остальное от лукавого, и никем не гарантировано."
Используйте всегда UTF-8 и никаких бед не будет.

  Ответить  
 
 автор: AntonE   (17.10.2008 в 12:46)   письмо автору
 
   для: coloboc66   (16.10.2008 в 10:30)
 

Извините пожалуйста, что я немного тугой, но что-то до меня плохо доходит.
Как я понял, UTF - это универсальная кодировка, созданная специально, чтобы можно было использовать символы различных языков. Т.е. это как бы кодировка-буфер, в ней просто "хранятся" данные, а затем, когда тебе нужно, допустим, вывести эти данные, ты указываешь нужную кодировку, например koi8-r.
Я правильно всё понимаю?
Дак вот у меня и проблема, допустим, если в БД хранятся данные в cp1251, запросом к БД я получаю xml документ в utf-8. Затем на странице я должен же указать, в какой кодировке я хочу получить эти данные? Я конечно указываю кириллицу, но на странице выводятся всякие ромбики.
Я неправильно понимаю саму суть в кодировках, или правильно понимаю, но просто что-то не так делаю в коде?

  Ответить  
 
 автор: coloboc66   (17.10.2008 в 15:05)   письмо автору
 
   для: AntonE   (17.10.2008 в 12:46)
 

Неправильно вы понимаете.
Это никакой не буфер, это такая же кодировка как ср1251, только намного более универсальная.
Чтобы нормально работать с кодировкой UTF-8 нужно
1. Данные в БД хранить в UTF-8
2.На HTML-странице указать кодировку UTF-8
3. Данные в XML-документе хранить в UTF-8
4. Все файлы с вашим кодом сохранить в UTF-8 (Файл-сохранить как- указать кодировку UTF-8 , каталог и имя.)
Теоретически - да - если указать XML-файлу виндовс-1251, то всё должно работать, но реально не получается. Почему - Трианон указывал.
Или же попробуйте использовать функцию iconv()

  Ответить  
 
 автор: AntonE   (17.10.2008 в 16:40)   письмо автору
 
   для: coloboc66   (17.10.2008 в 15:05)
 

Создал пробную таблицу в utf-8.
Добавил запись с русскими буквами.
На странице указал utf-8.
В xml-документе тоже указал utf-8.
Получаю результат в виде ромбиков с знаками вопросами.
Пробовал на странице ставить мета в кириллице и хидеры везьде в кириллице ставил - всё равно ромбики.

А вот применение iconv() решила все проблемы :).
Спасибо, что подсказали эту функцию. Так же всем спасибо кто отвечал.
Тема закрыта.

  Ответить  
 
 автор: coloboc66   (17.10.2008 в 17:09)   письмо автору
 
   для: AntonE   (17.10.2008 в 16:40)
 

Файл-сохранить как- указать кодировку UTF-8 , каталог и имя. - А это делали?
Зря вы прицепились к кодировке 1251 - устарела она уже.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования