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

Форум PHP

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

 

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

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

тема: Не могу создать XML документ в кодировке Windows-1251
 
 автор: sega_z   (14.09.2011 в 22:19)   письмо автору
 
 


$xml=new DomDocument('1.0','Windows-1251'); // Создаем документ
$sorts = $xml->appendChild($xml->createElement('sorts')); // Создаем корень документа
$sort = $sorts->appendChild($xml->createElement('sort')); // Создаем группу в корне документа
$name = $sort->appendChild($xml->createElement('name')); // Создаем подгруппу внутри группы
$name->appendChild($xml->createTextNode('Яблоко')); // Присваиваем значения подгруппам
$xml->formatOutput = true; // устанавливаем выходной формат документа в true
$xml->save('yandex.xml');   // сохраняем файл


Создаёт пустой документ yandex.xml и выдает ошибку: "DOMDocument::save() [function.DOMDocument-save]: output conversion failed due to conv error, bytes 0xDF 0xE1 0xEB 0xEE ..."


$xml=new DomDocument('1.0','UTF-8'); // Создаем документ
$sorts = $xml->appendChild($xml->createElement('sorts')); // Создаем корень документа
$sort = $sorts->appendChild($xml->createElement('sort')); // Создаем группу в корне документа
$name = $sort->appendChild($xml->createElement('name')); // Создаем подгруппу внутри группы
$name->appendChild($xml->createTextNode('Яблоко')); // Присваиваем значения подгруппам
$xml->formatOutput = true; // устанавливаем выходной формат документа в true
$xml->save('yandex.xml');   // сохраняем файл


А так все работает, но мне нужно чтобы заголовок документа был: <?xml version="1.0" encoding="windows-1251"?>

Как применить кодировку Windows-1251???

  Ответить  
 
 автор: sega_z   (15.09.2011 в 17:43)   письмо автору
 
   для: sega_z   (14.09.2011 в 22:19)
 

Ребята, кто нибудь подскажет как поменять кодировку???

  Ответить  
 
 автор: sega_z   (15.09.2011 в 18:59)   письмо автору
 
   для: sega_z   (15.09.2011 в 17:43)
 

Все говорят, что XML работает только в UTF-8, но почему тогда Яндекс Авто требует, чтобы в заголовке XML файла было <?xml version="1.0" encoding="windows-1251"?>

Вот смотрите сами: http://help.yandex.ru/webmaster/?id=1114016

  Ответить  
 
 автор: cheops   (15.09.2011 в 19:48)   письмо автору
 
   для: sega_z   (15.09.2011 в 18:59)
 

А у них не XML, а свой собственный формат YML (могу ошибаться, но помоему он нарушает XML-требования по парочке позиций). Вообще, конечно, XML поддерживает Windows-1251, однако эту кодировку поддерживает далеко не каждая библиотека, оперирующая XML.

  Ответить  
 
 автор: sega_z   (15.09.2011 в 20:40)   письмо автору
 
   для: cheops   (15.09.2011 в 19:48)
 

Понятно, спасибо!

Я создал таким образом:


$result = mysql_query ("SELECT * FROM doska WHERE podrazd='Легковые автомобили' ORDER BY id DESC",$db);
$myrow = mysql_fetch_array ($result);

// Откроем файл (если он есть) или создадим его
$fp = fopen ("yandex_auto.xml", "a+");

// Вывод будем осуществлять в файл (yandex_auto.xml)

   fputs($fp,"<?xml version=\"1.0\" encoding=\"windows-1251\"?>\n");
   
fputs($fp,"<dataset>\n");

   
   while(
$myrow mysql_fetch_array ($result))
   {

      
fputs($fp,"<row>\n");
      
fputs($fp,"<marka>".$myrow["marka"]."</marka>\n");
      
fputs($fp,"<model>".$myrow["model"]."</model>\n");
      
fputs($fp,"</row>\n");  
   }
//endwhile
   
  
  
fputs($fp,"</dataset>\n");
  
fclose($fp);  


Но опять же как быть с этим: "Стандарт XML не допускает появления символов с ASCII-кодами в диапазоне значений от 0 до 31 (за исключением значений 9, 10, 13 — табуляция, перевод строки, возврат каретки) в текстовых полях. Также этот стандарт строго требует заменять в тексте все следующие символы."

  Ответить  
 
 автор: cheops   (15.09.2011 в 21:06)   письмо автору
 
   для: sega_z   (15.09.2011 в 20:40)
 

XML более сложен, чем кажется на первый взгляд, он все позволяет, в том числе хранить тэги, скрипты, бинарные данные, для этого их нужно помещать в конструкцию вида
<![CDATA[
...
]]>

  Ответить  
 
 автор: sega_z   (15.09.2011 в 21:36)   письмо автору
 
   для: cheops   (15.09.2011 в 21:06)
 

А как получить это: &quot; &amp; &gt; &lt; &apos; в последнем коде создания XML файла?

  Ответить  
 
 автор: cheops   (15.09.2011 в 21:44)   письмо автору
 
   для: sega_z   (15.09.2011 в 21:36)
 

Не очень понятно, откуда получить? Или имеется в виду преобразовать ", &? < и > в специальные последовательности?

  Ответить  
 
 автор: sega_z   (15.09.2011 в 22:13)   письмо автору
 
   для: cheops   (15.09.2011 в 21:44)
 

Да, если встретятся в тексте

  Ответить  
 
 автор: cheops   (15.09.2011 в 22:53)   письмо автору
 
   для: sega_z   (15.09.2011 в 22:13)
 

Можно воспользоваться функцией htmlentities() или явно их заменить при помощи str_replace().

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

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