|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2003-01-01 14:59 UTC] chregu@php.net
[2003-01-03 04:01 UTC] flying at dom dot natm dot ru
[2003-01-03 09:35 UTC] chregu@php.net
[2003-04-03 09:49 UTC] chregu@php.net
[2003-04-09 06:36 UTC] sniper@php.net
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sat Oct 25 08:00:01 2025 UTC |
Please take a look at following example: <?php $xml = domxml_open_mem('<'.'?xml version="1.0"?'.'><root/>'); $root = $xml->root(); $value = $root->set_attribute('a','a&b'); $value = $root->set_content('a&b'); echo $xml->dump_mem(); ?> It produces following results: <?xml version="1.0"?> <root a="a&amp;b">a&b</root> As you may see - & entity is treated as literals when it is being set as attribute value while same entity is treated as entity reference being set as node value. I have checked PHP's DOMXML extension source, libxml2 sources and discuss about this behaviour with Daniel Viellard (libxml2 maintainer) and with some other people on public XML-related forums and here is some information about this issue: 1. Such behaviour is not a libxml2 bug, it is expected behaviour. Moreover it is more correct from a point of specifications. 2. There should be a way to access Attr DOM object as specified into DOM Level 1 specification 3. There should be a way to control entites handling into passed values. As a way to go i want to propose you to add one additional argument to set_attribute(), set_content() and maybe some other functions - $options. For now there will be 2 options: XML_KEEP_ENTITIES - to treat all entities as entites and create them as EntityReference DOM objects XML_QUOTE_ENTITIES - to treat all entities as literals and hence quote all special symbols in them (such as '&' char). For compatibility reasons $options for set_attribute() may be set to XML_QUOTE_ENTITIES as default value and $options for set_content() - for XML_KEEP_ENTITIES. Internally you probably should change xmlSetProp() call into domxml_elem_set_attribute() to xmlNodeSetContentLen() when there is $options=XML_KEEP_ENTITIES.