首先:
- 使用库的全部目的是自动为您完成编码和解码。
- 如果您注入文字
< 字符,则您正在定义一个 XML 标记。
假设您有正当理由关心 < 和 > 的编码方式,您必须使用 CDATA:
<?php
$dom = new DOMDocument;
$dom->load("test.xml");
$titles = $dom->getElementsByTagName('title');
foreach ($titles as $title) {
$newNode = $dom->createCDATASection($title->nodeValue);
$title->nodeValue = null;
$title->appendChild($newNode);
}
$dom->save("success.xml");
...生成:
<?xml version="1.0"?>
<section id="1">
<title id="2"><![CDATA[>]]></title>
<title id="2"><![CDATA[<]]></title>
<title id="2"><![CDATA[<]]></title>
</section>
但此文档与您已有的文档 100% 等效(除了缺少的 <?xml version="1.0"?> 标题)。
编辑#1:实体只是编码特殊字符的句法技巧,它们根本不会改变节点内容,PHP会自动为您解码所有内容:
$dom = new DOMDocument;
$dom->load("test.xml");
$titles = $dom->getElementsByTagName('title');
foreach ($titles as $title) {
var_dump($title->nodeValue);
}
... 按预期打印解码后的内容:
string(1) ">"
string(1) "<"
string(1) "<"
也许用这个其他例子更容易看出:
echo 'O\'Brian';
... 打印 O'Brian 和 not O\'Brian。我们正在对字符串进行编码,而不是修改它。
我怀疑在整个图片中有一些像这样的jQuery代码:
$.get('ajax/data.php', function(data) {
$('.result').text(data);
});
...应该有类似的东西:
$.get('ajax/data.php', function(data) {
$('.result').html(data);
});
编辑#2:
我什至无法想象你的创作系统是如何工作的(我希望你没有使用 WYSIWYG 编辑器来实际 type HTML 标签)但你已经询问了 XML 和 XML你只能用尖括号做两件事:
- 数据
- 标签
在DOMDocument 中,您可以使用createElement() 创建标签,并且可以插入之前创建的标签,例如appendChild().
期间。