首先:
- 使用库的全部目的是自动为您完成编码和解码。
- 如果您注入一个文字
<
字符,那么您就是在定义一个 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
而不是 O\'Brian
。我们正在对字符串进行编码,而不是修改它。
我怀疑在整个图片中有一些像这样的jQuery代码:
$.get('ajax/data.php', function(data) {
$('.result').text(data);
});
...应该有类似的东西:
$.get('ajax/data.php', function(data) {
$('.result').html(data);
});
编辑#2:
我什至无法想象您的创作系统是如何工作的(我希望您没有使用 WYSIWYG 编辑器来实际输入HTML 标记)但是您已经询问过 XML,而在 XML 中,您只能从角度做两件事括号:
- 数据
- 标签
在DOMDocument中,您可以使用createElement()创建标签,并且可以使用例如appendChild()插入先前创建的标签。
时期。