|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2008-06-12 21:31 UTC] erudd at netfor dot com
Description: ------------ Referencing bug #44458 Where in the documentation does it state that the strings must be escaped when setting attributes or assigning values to children. I can find it nowhere in the documentation, nor any examples where you show that you "must escape text content" before entering it into the attribute or text content of an element. Also this behavior is inconsistent behavior as when you fetch the data it is NOT escaped. So why should I need to escape the data when putting it in? This makes simpleXML not so simple as I have to perform extra "unexpected" work while storing data into the xml document. Which I do not have to do with the DOM extension. Consistency should be high priority in this.. I should expect to retrieve the same value out that I put in. the SimpleXML class should handle encoding and decoding data for me so "I" don't have to think about it. Reproduce code: --------------- $sxml=new SimpleXMLElement('<test></test>'); $sxml->addChild('child1','One & Two'); echo "Test 1:".(string)$sxml->child1."\n"; $sxml->addChild('child2','One & Two'); echo "Test 2:".(string)$sxml->child2."\n"; $sxml->addChild('child3'); $sxml->child3 = 'One & Two'; echo "Test 3:".(string)$sxml->child3."\n"; Expected result: ---------------- Test 1:One & Two Test 2:One & Two Test 3:One & Two Actual result: -------------- Test 1:One Test 2:One & Two Test 3:One & Two PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Thu Dec 04 06:00:01 2025 UTC |
You can have simplicity or completeness, but you can't have them both at the same time. SimpleXML offers simplicity through its magic method ($sxml->child) and completeness through addChild(). If you don't want to bother with escaping, use $sxml->child1 = 'One & Two'; If you need to bypass escaping, use $sxml->addChild('child1', 'One & Two'); Without addChild(), or if addChild() was identical to the magic method, it would be impossible to use XML entities, eg   would need to be replaced by the actual character if the document's encoding. And if that character was not available in that encoding (or charset, rather) then it would simply be impossible to use. That's why addChild()'s behaviour is both desirable and needed.That's not SimpleXML's normal behaviour, and I couldn't reproduce it on PHP 5.2.6-pl1-gentoo (cli) (built: May 26 2008 02:58:50) + libxml 2.6.31 Check out your PHP version and libxml version, perhaps you're unknowingly running an older release. Reproduce code: --------------- $sxml=new SimpleXMLElement('<test></test>'); $sxml->child1 = 'One & Two'; echo $sxml->child1, "\n"; $sxml->child1 = 'One & Two'; echo $sxml->child1, "\n"; Actual result: -------------- One & Two One & TwoIs addAttribute supposed to work the same way as addChild?? As currently it does not (tested in 5.2.5 and 5.2.6) Also $xml = new SimpleXmlElement('<test/>'); $xml['attribute'] = "my val"; does not work it throws an error (5.2.6) claiming that the "objects don't support array access operators".