ID:               36795
 Comment by:       gary dot malcolm at gmail dot com
 Reported By:      john at carney dot id dot au
 Status:           No Feedback
 Bug Type:         DOM XML related
 Operating System: Windows/Linux
 PHP Version:      5.1.2
 New Comment:

I'm running PHP 5.2.9 on Linux and this bug is still alive and well
making SimpleXml absolutely inappropriate for XML communications between
systems.
<code>
$safe_value = preg_replace('/&(?!\w+;)/', '&amp;', $value);
  return $sxml->addChild($name, $safe_value);
</code>
Is just plain wrong. I'm communicating user input directly to a bank as
I can't know how the third party will parse their xml.


Previous Comments:
------------------------------------------------------------------------

[2008-04-03 23:15:04] rob at electronicinsight dot com

A little hack to get around this bug:

function &safe_add_child(&$sxml, $name, $value) {
  $safe_value = preg_replace('/&(?!\w+;)/', '&amp;', $value);
  return $sxml->addChild($name, $safe_value);
}

------------------------------------------------------------------------

[2008-02-08 20:09:37] moshe at varien dot com

PHP 5.2.4
Looks like the problem appears when there's node already exists being
overwritten

// works ok, doesn't require encoding:
$a = simplexml_load_string('<a/>'); 
$a->b = "& < ' ";

// doesn't work, requires encoding:
$a = simplexml_load_string('<a><b>test</b></a>'); 
$a->b = "& < ' "; 

// doesn't work, always requires encoding
$a->addChild('b', "& < '");
$a->addAttribute('b', "& < '");

// works ok, never requires encoding
$a['b'] = "& < '";

------------------------------------------------------------------------

[2007-11-27 14:03:55] oscar at cdcovers dot to

I tried the workaround below and it seems to work:

$xml->addChild('element', '');
$xml->element = str_replace("&", "&amp;", "value of the element");

------------------------------------------------------------------------

[2007-09-28 06:40:20] ocus51 at gail dot com

Hi,

I'm still experiencing this problem :
 - PHP Version          5.2.0-8+etch7
 - DOM/XML API Version  20031129
 - libxml Version       2.6.27

------------------------------------------------------------------------

[2006-12-06 11:49:37] philippe dot levan_nospam at kitpages dot fr

Hi,

I have the same problem. My config is :
- PHP 5.2
- libxml Version 2.6.16
---------
<?php
$xmlStr = "<?xml version='1.0' encoding='UTF-8'?><root></root>";
$xml = new SimpleXMLElement($xmlStr);
$xml->addChild("foo",utf8_encode("start < > end"));
echo "foo tag added ok";
$xml->addChild("bar",utf8_encode("start & end"));
echo "error on bar tag because of &amp;";
$result = $xml->asXML();
echo "<pre>".htmlentities($result)."</pre>";
?>
-------------
you can run this script at :
http://www.kitpages.fr/test/bugSimpleXml.php

------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/36795

-- 
Edit this bug report at http://bugs.php.net/?id=36795&edit=1

Reply via email to