SimpleXMLElement将值设置为特殊字符

时间:2015-05-05 17:12:20

标签: php xml simplexml

我正在尝试使用SimpleXMLElement向节点文本发送特殊字符(小于,大于),但它将其转换为转义值。

$header[0] = "%SET(Amt_,<AMT>". $amt . "</AMT>) \n" .$header[0];

以上结果在XML文件中如下:

 %SET(Amt_,&lt;AMT&gt;100&lt;/AMT&gt;)

我尝试使用html_entity_decode,它仍以同样的方式写入文件。有没有办法将'特殊'字符写入simplexmlelement对象的文本值?

澄清:我想写实际字符'&lt;'和'&gt;'调用$header->asXML()时的文件。目前,转义版本是写入文件的。

2 个答案:

答案 0 :(得分:1)

发送数据时使用htmlspecialchars,并在需要获取原始字符串时使用htmlspecialchars_decode

<?php
  $amt = 100;
  $header[0] = "Some Value";
  $header[0] = "%SET(Amt_,<AMT>". $amt . "</AMT>) \n" .$header[0];
  $node =  htmlspecialchars($header[0]); 
  $value = htmlspecialchars_decode($node);
  file_put_contents("filename.txt", $value);
  echo "written on file";
?>

答案 1 :(得分:0)

解决方案适用于我的情况,我重新打开文件内容,解码并重新保存到文件。

$xml->asXML('test.xml');
$coded = file_get_contents('test.xml');
file_put_contents('test.xml', htmlspecialchars_decode($coded), LOCK_EX);