XMLWriter и вывод в НЕ утф-8.

Luerssen

Новичок
XMLWriter и вывод в НЕ утф-8.

Здравствуйте.

Изучаю XMLWriter, первый вопрос, как вывести в CP1251, а не в UTF-8?

Спасибо.

P.S. ->startDocument('1.0','UTF-8'); не подходит, т.к. создаём только 1 елемент.
 

slach

Новичок
что значит создаем ОДИН элемент???
без startDocument ;) у вас ерунда получится
 

Luerssen

Новичок
PHP:
$xw = new XMLWriter;
$xw->openMemory();

$d->startElement('input');
$d->writeAttribute('value', 'Превед!'); ## выводит а-ля ӒӒӒӒ
    
$d->endElement();
return $d->outputMemory(true);
 

slach

Новичок
хм... и правда
в параметраз XMLWriter::__contruct ничего похожего на кодировку нет

так, а вопрос на засыпку тогда =))
вам ЗАЧЕМ создавать ОДИН элемент?? да еще и обязательно НЕ в utf-8?
 

Luerssen

Новичок
slach
Плагин для смарти, а-ля быстрое создание форм.
С поддержкой AR стиля и т.д.
 

alekciy

Новичок
С XML лучше чем через DOM, имхо, ни чего не работает.
PHP:
$dom = new DOMDocument('1.0', 'windows-1251');
$element = $dom->appendChild(new DOMElement('root'));
echo $dom->saveXML();
 

slach

Новичок
alekciy

а сколько памяти оно будет жрать??? вы не считали??
посчитайте на досуге =) будет интересно
 

alekciy

Новичок
slach
вы не считали??
Если подскажите как посчитать, посчитаю.
 

slach

Новичок
memory_get_usage()
xdebug_memory_usage()

в общем на 100kb чистого текста в XML приходится 500-600 кб. DOM структур в памяти как минимум
 

alekciy

Новичок
slach
Спасибо, буду знать.

А вообще существует ли какой либо набор критериев по которому можно судить, что вот для этой задачи более выгодно использовать XMLWriter, а вот в другом случае DOM? По соотношению необходимый_функционал/производительность?
 

slach

Новичок
вообще я только что САМ наткнулся на такой вот БАГ
и с UTF-8 он никак не связан

http://pecl.php.net/bugs/bug.php?edit=1&id=8417

считается что это виноват libxml
щас попробую списаться с автором бага

если бы под win32 libxml2 не была buil-in compiled то я бы дальше копнул

может быть в текущей версии это и поправили

с другой стороны... IMHO ничего страшного не произошло

вот такой код
PHP:
<?php
	//write
	$xml	= new XMLWriter();
	$xml->openMemory();
	$xml->startDocument('1.0','UTF-8');
	$xml->startElement('XML');
	$xml->startElement('ELEMENT');
	$xml->writeAttribute('attrib', 'кирилица атрибут');
	$xml->endElement();
	$xml->endElement();
	$xml->endDocument();
	$xml_string=$xml->outputMemory();
	var_dump($xml_string);
	//reading DOM
	$dom=new DomDocument('1.0','UTF-8');
	$dom->loadXML($xml_string);
	var_dump($dom->documentElement->firstChild->getAttribute('attrib'));

	//reading SimpleXML
	$sxml = simplexml_load_string($xml_string);
	var_dump($sxml->ELEMENT->attributes());

	//reading MSXML COM
	$ms= new COM("Microsoft.XMLDOM");
	$ms->async=false;
	$ms->loadXML($xml_string);
	var_dump($ms->documentElement->firstChild->getAttribute('attrib'));

?>
показывает что при ЧТЕНИИ таких вот "кракозябликов", они вполне нормально резолвятся в 100% случаев
 
Сверху