|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2008-10-16 18:07 UTC] rrichards@php.net
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sat Nov 01 10:00:02 2025 UTC |
Description: ------------ It may be a misunderstanding of mine, but xml_parse doesn't seem to resolve 'simple' entities like < > or &. According to the doc, and one other bug report, I think it should. While other parsers (XMLReader, SimpleXML, DOM, ...) do. In numerical form, it does work (>). I tested with libxml2 versions 2.7.1 and 2.7.2, and expat 2.0.1. I found this when doing SOAP calls, I couldn't pass the value "<" to a PHP SOAP server (which is using NuSOAP). I don't have a workaround for the moment. Reproduce code: --------------- function character_data($parser, $data){ print("character_data: $data\n"); } function parsestring( $strg ) { $parser = xml_parser_create("UTF-8"); xml_set_character_data_handler($parser,'character_data'); xml_parse($parser,$strg,true); xml_parser_free($parser); $reader = new XMLReader(); $reader->XML( $strg ); while( $reader->read() ) { if( $reader->value ) print( $reader->name . ": " . $reader->value . "\n"); } } $xmlcdata = "<element><![CDATA[A>B&C<D]]></element>"; $xmlescaped = "<element>A>B&C<D</element>"; $xmlnumeric = "<element>A>B&C<D</element>"; print("parsing $xmlcdata \n"); parsestring( $xmlcdata ); print("\nparsing $xmlescaped \n"); parsestring( $xmlescaped ); print("\nparsing $xmlnumeric \n"); parsestring( $xmlnumeric ); Expected result: ---------------- parsing <element><![CDATA[A>B&C<D]]></element> character_data: A>B&C<D #cdata-section: A>B&C<D parsing <element>A>B&C<D</element> character_data: A character_data: > character_data: B character_data: & character_data: C character_data: < character_data: D #text: A>B&C<D parsing <element>A>B&C<D</element> character_data: A character_data: > character_data: B character_data: & character_data: C character_data: < character_data: D #text: A>B&C<D Actual result: -------------- parsing <element><![CDATA[A>B&C<D]]></element> character_data: A>B&C<D #cdata-section: A>B&C<D parsing <element>A>B&C<D</element> character_data: A character_data: B character_data: C character_data: D #text: A>B&C<D parsing <element>A>B&C<D</element> character_data: A character_data: > character_data: B character_data: & character_data: C character_data: < character_data: D #text: A>B&C<D