PHP 4 XML Parser functions AND PHP 5 XML Parser functions...

igor_ua

Новичок
PHP 4 XML Parser functions AND PHP 5 XML Parser functions...

Подскажите пожалуйста почему происходит следующее:

Есть XML файл типа:
<?xml version="1.0" encoding="utf-8"?>
<press>

<story>
<id>37</id>
<tpl>template3.tpl</tpl>
<date>23-05-2005</date>
<headline>&lt;span style=&quot;font-weight: bold;&quot;&gt;Headline 1&lt;/span&gt; &lt;span style=&quot;color: rgb(153, 51, 0);&quot;&gt;Some text&lt;/span&gt;&lt;br/&gt;</headline>
<text1>&lt;span style=&quot;font-weight: bold;&quot;&gt;S&lt;/span&gt;&lt;span style=&quot;font-style: italic; font-weight: bold;&quot;&gt;TORY TEXT *STORY TEXT *STORY TEXT *STORY TEXT *STORY TEXT *&lt;/span&gt;</text1>
<text2>123</text2>
<pic>false</pic>
</story>

</press>
если использовать XML Parser из PHP 4 то он преобразует HTML менмоники в соотв. символы, а PHP 5 просто уберает их.
В данном случае результат вывода PHP 5 будет (для тэга <headline>):

span style=font-weight: bold;Headline 1/spanspan style=color: rgb(153, 51, 0);Some text/spanbr/

А для PHP 4:

<span style="font-weight: bold;">Headline 1</span><span style="color: rgb(153, 51, 0);">Some text</span><br/>

В чем тут дело?

Спасибо.
 

slach

Новичок
IMHO
копать надо в сторону
http://bugs.php.net/bug.php?id=27908

php5 какой версии ?? может имеет смысл обновить ?
 

BeGe

Вождь Апачей, блин (c)
Смотрим настройки документа - есть вариант - что просто он ведёт себя правильно. Точно не помню, но кажись это не баг.
 

BeGe

Вождь Апачей, блин (c)
PHP:
<?php
$xml_str = '<?xml version="1.0" encoding="utf-8"?>
<press>
<story>
<id>37</id>
<tpl>template3.tpl</tpl>
<date>23-05-2005</date>
<headline>&lt;span style="font-weight: bold;"&gt;Headline 1&lt;/span&gt; &lt;span style="color: rgb(153, 51, 0);"&gt;Some text&lt;/span&gt;&lt;br/&gt;</headline>
<text1>&lt;span style="font-weight: bold;"&gt;S&lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;TORY TEXT *STORY TEXT *STORY TEXT *STORY TEXT *STORY TEXT *&lt;/span&gt;</text1>
<text2>123</text2>
<pic>false</pic>
</story>
</press>';

$dom = new DOMDocument("1.0","UTF-8");
$dom->loadXML($xml_str);
echo $dom->saveHTML();
echo "</br></br>";
echo $dom->saveXML();
?>
Ничего не пропадает - версия php 5.0.2 - крутится на IIS
 

igor_ua

Новичок
Ну я имел ввиду не эту библиотеку, а именно XML Parser functions, т.к. вот что пишут о DOM XML Functions:

Note: This extension has been moved to the PECL repository and is no longer bundled with PHP as of PHP 5.0.0.

Note: This extension is no longer marked experimental. It will, however, never be released with PHP 5, and will only be distributed with PHP 4. If you need DOM XML support with PHP 5 you can use the DOM extension. This domxml extension is not compatible with the DOM extension.

Спасибо.
 

BeGe

Вождь Апачей, блин (c)
Это старый Extension, сейчас уже есть новый которые на 100% соотвествует DOM w3c.
 

slach

Новичок
если файл БОЛЬШОЙ ! то нет смысла парсить его через DOM надо чтото делать с SAX парсером на xml_* ф-циях

если не очень болшой (до 100кб)
то проще всего переделать парсинг на simpleXML
см. http://php.net/manual/en/ref.simplexml.php
 

igor_ua

Новичок
Файл-то не большой, даже маленький, и нужно что бы работал как в 4 так и в 5 ПХП, вот собственно вопрос возник, т.к. результат работы одной и тойже функции различный в 4 и 5 ПХП.

То что в 5 есть simpleXML, это понятно и мне очень даже нравится как это реализовали, но ведь в 4 этого нет :-(.
 

slach

Новичок
дык а что мешает
сделать в php4 через xml_*
а в php5 через simpleXML ???
http://php.net/manual/en/ref.simplexml.php
там в есть функция типа xml2array

ну будет кода больше, но проверять PHP_VERSION и инклудить соответсвующую либу проблем нет IMHO

но можно даже объектный враппер придумать при желании
 

igor_ua

Новичок
:) Да проблемы то нет, хотел узнать просто почему такие метаморфозы происходят.

Спасибо
 

slach

Новичок
честно говоря
хочешь узнать
напиши багрепорт

приведи code for reproduce
и exepted result
и real result
 
Сверху