обрезает строки...

Buteo

[CDR/DVP]
обрезает строки...

при парсинге xml обрезаються строчки, в которых есть знак амперсанд &

кусок пхп
PHP:
$xml_parser = xml_parser_create();
xml_set_object($xml_parser, &$this);
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
// ...
function characterData($parser, $data)
{
  var_dump($data);
  // выводит string(5) ".PSD;"
}
кусок xml (as is): <src>.PSD;&lt;br&gt;.HTML;&lt;br&gt;</src>

собсвтенно почему? ведь &lt; &gt; и &amp;amp; -- допустимые символы...

как лечиться это? :)

-~{}~ 03.09.04 14:46:

оказываеться как только доходит до & вызываеться опять функция characterData , но вот только символы &lt; &gt; и &amp;amp автоматом заменяються :(

string(0) ""
string(5) ".PSD;"
string(6) ".PSD;&"
string(11) ".PSD;&lt;br"
string(12) ".PSD;&lt;br>"
string(18) ".PSD;&lt;br>.HTML;"
string(19) ".PSD;&lt;br>.HTML;<"
string(21) ".PSD;&lt;br>.HTML;<br"
string(22) ".PSD;&lt;br>.HTML;<br>"

-~{}~ 03.09.04 21:33:

обнаружил, что по каким-то непонятным причинам может вызываться подряд characterData несколь раз и разбивать данные на части??
вот если такое распарсить:
<url>http://somesite.com/some/page/myimg1.jpg</url>
<url>http://somesite.com/some/page/myimg2.jpg</url>
...
<url>http://somesite.com/some/page/myimgN.jpg</url>

получим:
string(40) "http://somesite.com/some/page/myimg1.jpg"
string(40) "http://somesite.com/some/page/myimg2.jpg"
string(22) "http://somesite.com/so"
string(18) "me/page/myimg3.jpg"
string(40) "http://somesite.com/some/page/myimg4.jpg"
...

вообщем, если кто знает почему такие вещи происходят, плиз, объясните...

p.s. проверял на win2000 и на Debian

-~{}~ 06.09.04 12:50:

такс... со вторым разобрался: потому что я считываю по 4096 байт:
PHP:
  while ($data = fread($fp, 4096))
    {
      if (!xml_parse($xml_parser, $data, feof($fp)))
      {
p.s. какой-то у меня монолог получаеться :)
p.s.s. с первым не разобрался, но вообщем сделал, что всё работает... всем пасиба...
 
Сверху