LINUX.ORG.RU

[php5][expat] где мои entity?


0

0

ситуация: почему-то в php5 не получается правильно получить entity из xml-я. долгое время сидел на php4-cgi и все было великолепно. спрашивается, что я недопонимаю?

код, который должен рисовать "<":

[code]
<?php

error_reporting(E_ALL);
ini_set('display_errors', 1);

$xml = <<<EOB
<?xml version="1.0" encoding="utf-8"?>
<root>There should be a less sign: "&lt;"</root>
EOB;

function startt($p, $n, $a) {
}

function endt($p, $n) {
}

function cdata($p, $d) {
echo htmlspecialchars($d);
}

$p = xml_parser_create('UTF-8');
xml_parser_set_option($p, XML_OPTION_CASE_FOLDING, false);
xml_parser_set_option($p, XML_OPTION_SKIP_WHITE, false);
xml_set_element_handler($p, 'startt', 'endt');
xml_set_default_handler($p, 'cdata');
if(!xml_parse($p, $xml, true)) {
echo 'DONE with ' . xml_get_error_code($p) . ':' . xml_error_string($p);
}
[/code]

эквивалентный C-шный код, который таки рисует "<":

[code]
#include <stdio.h>
#include <expat.h>

void startElement(void *userData, const char *name, const char **atts)
{
}

void endElement(void *userData, const char *name)
{
}

void cdata(void *userData, char *data, int len) {
printf("%.*s", len, data);
}

char xml[] = "<?xml version=\"1.0\"?>"
"<root>There should be a less sign: \"&lt;\"</root>";

int main()
{
XML_Parser parser = XML_ParserCreate(NULL);
XML_SetElementHandler(parser, startElement, endElement);
XML_SetCharacterDataHandler(parser, cdata);
if (!XML_Parse(parser, xml, strlen(xml), 1)) {
fprintf(stderr,
"%s at line %d\n",
XML_ErrorString(XML_GetErrorCode(parser)),
XML_GetCurrentLineNumber(parser));
return 1;
}
}

[/code]

★★★★★

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.