【发布时间】:2009-09-01 11:02:06
【问题描述】:
我在 PHP 中使用 dom->createTextNode()。我看到它会自动转义字符,例如 /"" 等。根据 PHP 的手册,这是一种标准行为。
有没有可能它不转义任何字符?
谢谢。
【问题讨论】:
-
你可能做错了什么。对我来说,这并没有逃避任何事情。粘贴一些代码。
我在 PHP 中使用 dom->createTextNode()。我看到它会自动转义字符,例如 /"" 等。根据 PHP 的手册,这是一种标准行为。
有没有可能它不转义任何字符?
谢谢。
【问题讨论】:
如果某些字符没有被转义,你最终可能得不到一个有效的 XML 文件。
如果您不想转义任何字符,也许使用DOMDocument::createCDATASection 在您的 XML 文件中获取 CDATA sections 会有所帮助。
不过,请注意,您会在您的 XML 中得到那种东西(嗯,CDATA 部分):
<tag><![CDATA[<greeting>Hello, world!</greeting>]]></tag>
【讨论】:
如果您可以通过创建 DomDocumentFragment 节点并使用 appendXML() 方法附加原始文本来避免转义序列:
$rawXMLNode = $domDoc->createDocumentFragment();
$rawXMLNode->appendXML("<tag>text</tag><tag2>text2</tag2>");
$someNode->appendChild($rawXMLNode);
但是,我认为您不一定可以在不重新加载文档的情况下访问此原始文本的 DOM。还有一些字符仍然不允许进入。我需要做一些字符串处理以使用这种方法将一些 php 插入到 html 文档中:
$elem = $domHtml->getElementById('header');
$newElem = $domHtml->createDocumentFragment();
$newElem->appendXML('<div id="header"><?php include("templates/header.html"); QQQ?></div>');
$elem->parentNode->replaceChild($newElem, $elem);
$filedata = $domHtml->saveHTML();
$filedata = str_replace('QQQ', '?', $filedata);
【讨论】: