PHP如何使用QUOTE;包含DOMdocument的XML实体
我正在修改由其他库生成的XML文件的内容。我正在使用PHP(5.3.10)对DOM进行一些修改,并重新插入一个替换节点 我正在处理的XML数据具有PHP如何使用QUOTE;包含DOMdocument的XML实体,php,xml,dom,Php,Xml,Dom,我正在修改由其他库生成的XML文件的内容。我正在使用PHP(5.3.10)对DOM进行一些修改,并重新插入一个替换节点 我正在处理的XML数据具有”和;元素,并且我希望在完成修改时保持这些元素 但是,我在PHP更改“元素时遇到问题。请参阅我的示例 $temp = 'Hello "XML".'; $doc = new DOMDocument('1.0', 'utf-8'); $newelement = $doc->createElement('descri
”和;元素,并且我希望在完成修改时保持这些元素
但是,我在PHP更改“
元素时遇到问题。请参阅我的示例
$temp = 'Hello "XML".';
$doc = new DOMDocument('1.0', 'utf-8');
$newelement = $doc->createElement('description', $temp);
$doc->appendChild($newelement);
echo $doc->saveXML() . PHP_EOL; // shows " instead of element
$node = $doc->getElementsByTagName('description')->item(0);
echo $node->nodeValue . PHP_EOL; // also shows "
输出
<?xml version="1.0" encoding="utf-8"?>
<description>Hello "XML".</description>
Hello "XML".
<?xml version="1.0" encoding="utf-8"?>
<description>Hello "XML" &.</description>
Hello "XML" &.
输出
<?xml version="1.0" encoding="utf-8"?>
<description>Hello "XML".</description>
Hello "XML".
<?xml version="1.0" encoding="utf-8"?>
<description>Hello "XML" &.</description>
Hello "XML" &.
您好“XML”;。
您好“XML”&。
答案是它实际上不需要任何转义(跳过CDATA的提及):
符号(&)和左尖括号()可以使用字符串“
(…)表示
为了允许属性值同时包含单引号和双引号,撇号或单引号字符(')可以表示为“&apos;“
,双引号字符(“)为”
您可以通过使用createTextNode()
执行正确的转义来轻松验证这一点:
$dom = new DOMDocument;
$e = $dom->createElement('description');
$content = 'single quote: \', double quote: ", opening tag: <, ampersand: &, closing tag: >';
$t = $dom->createTextNode($content);
$e->appendChild($t);
$dom->appendChild($e);
echo $dom->saveXML();
$dom=新的DOMDocument;
$e=$dom->createElement('description');
$content='单引号:\',双引号:',开头标记:';
$t=$dom->createTextNode($content);
$e->t(t);
$dom->appendChild($e);
echo$dom->saveXML();
输出:
<?xml version="1.0"?>
<description>single quote: ', double quote: ", opening tag: <, ampersand: &, closing tag: ></description>
单引号:',双引号:,开始标记:,符号和:&;,结束标记:
有趣-我创建了一个新DOMText($temp);
作为文本节点,然后将其附加到$newelement
(一个空的
节点,我得到的结果几乎是正确的:Hello";XML";
@MichaelBerkowski,这很有趣。如果您使用的是已经编码的字符串$temp,那么您的方法对其进行了双重编码,但它在saveXML期间正确地保持了编码。您能描述一下您正在做的事情吗当我尝试DOMText时,设置了一个“无效字符错误”。我看不出在元素的节点值中未编码双引号有什么错?它们只有在属性值内部时才会被转义。@Ja͢ck XML规范用于在任何文本节点中编码双引号。嗯,规范只提到&
和这很有趣,因为使用我假设WordPress中的XML内部编码正确,在返回时我试图复制它们的XML,并使用它们的代码进行处理。我遇到了PHP/实体的错误,我认为有些地方不对劲,WordPress是对的。我必须查看它们的代码,看看它们是如何在代码中生成这些实体的ir XML。无论出于何种原因,它都会使我对WP如何解析我修改过的XML产生问题。一个简单的问题。当您提到编码“仅适用于属性”时,这是否包括嵌入的html属性?例如,如果文本节点有带属性的html标记?文本节点不能有html标记,因此,开始标记mu他一定会逃走的。