From:             [EMAIL PROTECTED]
Operating system: All
PHP version:      4.3.0RC4
PHP Bug Type:     DOM XML related
Bug description:  invalid entities handling into set_attribute() and set_content()

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&amp;b');
$value = $root->set_content('a&amp;b');
echo $xml->dump_mem();
?>

 It produces following results:

<?xml version="1.0"?>
<root a="a&amp;amp;b">a&amp;b</root>

 As you may see - &amp; 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.
-- 
Edit bug report at http://bugs.php.net/?id=21213&edit=1
-- 
Try a CVS snapshot:         http://bugs.php.net/fix.php?id=21213&r=trysnapshot
Fixed in CVS:               http://bugs.php.net/fix.php?id=21213&r=fixedcvs
Fixed in release:           http://bugs.php.net/fix.php?id=21213&r=alreadyfixed
Need backtrace:             http://bugs.php.net/fix.php?id=21213&r=needtrace
Try newer version:          http://bugs.php.net/fix.php?id=21213&r=oldversion
Not developer issue:        http://bugs.php.net/fix.php?id=21213&r=support
Expected behavior:          http://bugs.php.net/fix.php?id=21213&r=notwrong
Not enough info:            http://bugs.php.net/fix.php?id=21213&r=notenoughinfo
Submitted twice:            http://bugs.php.net/fix.php?id=21213&r=submittedtwice
register_globals:           http://bugs.php.net/fix.php?id=21213&r=globals
PHP 3 support discontinued: http://bugs.php.net/fix.php?id=21213&r=php3
Daylight Savings:           http://bugs.php.net/fix.php?id=21213&r=dst
IIS Stability:              http://bugs.php.net/fix.php?id=21213&r=isapi

Reply via email to