带有DOMDocument的简单xml文档中的&符号

时间:2014-08-21 20:48:47

标签: xml character-encoding simplexml special-characters domdocument

这是交易,我正在从我的网页数据库恢复数据并创建一个xml,其唯一目的是将该数据导入我的本地数据库。我这样做是因为我本地数据库中的数据非常具体,我不想用无用的信息填充它,所以我这样做是:

<?php
ini_set( 'default_charset', 'UTF-8' );

$ID = $_GET['ID'];

$personInfo = GetPersonSoftwareByID($ID); //this is a function that i created on my own

//xml section

$domTree = new DOMDocument('1.0', 'UTF-8');
$rootXML = $domTree->createElement( 'XML' );
$rootXML = $domTree->appendChild($rootXML);

$personalSoftware = $domTree->createElement( 'PERSON_SOFTWARE' );
$personalSoftware = $rootXML->appendChild($personalSoftware);

$soft = $domTree->createElement('SOFTWARE');
$level = $domTree->createElement('LEVEL');

$soft->nodeValue = $softwares[software];// here the value is = 'Plant&ID'
$level->nodeValue = $softwares[level];

$soft = $personalSoftware ->appendChild($soft);
$level = $personalSoftware ->appendChild($level);

header('Content-type: text/xml; charset=UTF-8');
header('Content-Disposition: attachment; filename="test.xml");

echo $domTree->saveXML();
?>

但是当我尝试创建xml时,这就出现了:     警告:main()[function.main]:第xx行中未终止的实体引用ID

我已尝试过htmlentities并且创建了xml但是当我尝试使用simplexml_load_string导入时,我得到了一大堆警报,但没有使用&amp;而是与其他字符,如Ã和³

有没有办法在数据库中修复或保存xml?顺便说一下,存储在网页数据库和本地数据库中的数据是西班牙语信息

感谢提前!

1 个答案:

答案 0 :(得分:4)

这是PHP中的bug,会影响DOMNode::$nodeValueDOMDocument::createElement() afaik 甚至是SimpleXML。

您可以通过创建文本节点并附加它来轻松避免它。

$dom = new \DOMDocument();
$dom
  ->appendChild($dom->createElement('company'))
  ->appendChild($dom->createTextNode('A & B & C'));

echo $dom->saveXml();

您仍然可以将$nodeValue设置为空字符串以删除节点的内容,但我不会使用它来设置文本值。