[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как создать XML файл в кодировке windows-1251?
segazav
Использую типичный код создания XML файла:


$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"?>

Пробовал так:


$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'); // сохраняем файл


Но выдаёт ошибку: "DOMDocument::save() [function.DOMDocument-save]: output conversion failed due to conv error, bytes 0xDF 0xE1 0xEB 0xEE ..."

Как быть???



Спустя 21 минута, 30 секунд (15.09.2011 - 17:27) caballero написал(а):
сам php файл сделай в виндовой кодировке

Спустя 12 минут, 41 секунда (15.09.2011 - 17:40) segazav написал(а):
Попробовал так:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta
http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>
Пробный файл</title>
</head>

<body>


[php]
$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'); // сохраняем файл
[/php]
</body>
</html>



Но выдал ошибку: "Warning: DOMDocument::save() [function.DOMDocument-save]: output conversion failed due to conv error, bytes 0xDF 0xE1 0xEB 0xEE ..."

Спустя 1 минута, 41 секунда (15.09.2011 - 17:41) twin написал(а):

Мыши плакали, кололись, но продолжали жрать кактус...
Не будет толку от этих местечковых кодировок. Сейчас XML не работает, завтра аякс забрагозит, послезавтра...

Ну что так трудно один раз уяснить себе что UTF - это единственно правильная кодировка.
И пока не поздно все поменять.

Спустя 6 минут, 35 секунд (15.09.2011 - 17:48) Winston написал(а):
Цитата (twin @ 15.09.2011 - 17:41)
послезавтра...

Спустя 1 минута, 59 секунд (15.09.2011 - 17:50) alex12060 написал(а):
segazav

iconv() ?

Спустя 53 секунды (15.09.2011 - 17:51) caballero написал(а):
файл с ИСХОДНЫМ кодом преобразуй блокнотом в виндовую кодировку

замени яблоко на apple если заработает значит кодировка файла

Спустя 3 минуты, 31 секунда (15.09.2011 - 17:54) segazav написал(а):
Но почему тогда Яндекс Авто требует, чтобы в заголовке XML файла было <?xml version="1.0" encoding="windows-1251"?>

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

Спустя 40 минут, 23 секунды (15.09.2011 - 18:35) segazav написал(а):
Даже так не работает???


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

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

// "Внедрим" нужные нам XML-тэги вручную

print "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\n";
print "<dataset>\n";

while($myrow = mysql_fetch_array ($result))
{
print "<row>\n";
print "<name>".$myrow["marka"]."</name>\n";
print "<category>".$myrow["model"]."</category>\n";
print "</row>\n";
}//endwhile

print "</dataset>\n";

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


fputs($fp,"\n");
fputs($fp,"\n");


while($myrow = mysql_fetch_array ($result))
{

fputs($fp,"\n");
fputs($fp,"".$myrow["marka"]."\n");
fputs($fp,"".$myrow["model"]."\n");
fputs($fp,"\n");
}//endwhile


fputs($fp,"\n");
fclose($fp);


В браузере все нормально выдаёт, а файл создается пустой с четырьмя чистыми строками.

Спустя 3 минуты, 58 секунд (15.09.2011 - 18:39) caballero написал(а):
базе скажи через SET NAMES обы выдавала виндовую кодировку


и браузеру скажи что ты посылаешь
header("Content-Type: и т.д.

Спустя 14 минут, 29 секунд (15.09.2011 - 18:53) Invis1ble написал(а):
10.5 месяцев на форуме, а до сих пор поповщина
Цитата
В браузере все нормально выдаёт, а файл создается пустой с четырьмя чистыми строками.

потому что второй цикл с 0 итерациями

Спустя 8 минут, 43 секунды (15.09.2011 - 19:02) segazav написал(а):
А что такое: "потому что второй цикл с 0 итерациями" и что с этим делать???

Спустя 2 минуты, 56 секунд (15.09.2011 - 19:05) Invis1ble написал(а):
Цитата
А что такое: "потому что второй цикл с 0 итерациями"

это значит, что
Цитата
$myrow = mysql_fetch_array ($result)

всегда будет false в данном случае.
Цитата
и что с этим делать???

переписать код, например переместить блок записи в файл в первый цикл.

Спустя 17 минут, 9 секунд (15.09.2011 - 19:22) segazav написал(а):
Да но как тогда записать это:


// "Внедрим" нужные нам XML-тэги вручную

print "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\n";
print "<dataset>\n";

while($myrow = mysql_fetch_array ($result))
{
print "<row>\n";
print "<name>".$myrow["marka"]."</name>\n";
print "<category>".$myrow["model"]."</category>\n";
print "</row>\n";
}//endwhile

print "</dataset>\n";


в созданный файл?

Спустя 5 минут, 24 секунды (15.09.2011 - 19:27) segazav написал(а):
Простите, что то тупанул:


// Откроем файл (если он есть) или создадим его
$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,"<name>".$myrow["marka"]."</name>\n");
fputs($fp,"<category>".$myrow["model"]."</category>\n");
fputs($fp,"</row>\n");
}//endwhile


fputs($fp,"</dataset>\n");
fclose($fp);


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

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

И ?

Спустя 1 час, 9 минут, 17 секунд (15.09.2011 - 20:39) caballero написал(а):
Цитата
И ?


что И?

перенос строки убери с XML

\n который

Спустя 4 минуты (15.09.2011 - 20:43) Invis1ble написал(а):
ты попутал наверное, вопрос "И ?" был к ТС wink.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.