我在PHP中使用dom-> createTextNode()。我看到它会自动转义字符,例如/“”等。根据PHP的手册,这是一个标准行为。
它有可能不会逃脱任何角色吗?
感谢。
答案 0 :(得分:3)
如果某些字符未被转义,最终可能无法获得有效的XML文件。
如果您不希望转义任何字符,可能需要使用DOMDocument::createCDATASection
来获取XML文件中的CDATA sections,这可能有所帮助。
但请注意,您将在XML中获得(以及CDATA部分)的那些内容:
<tag><![CDATA[<greeting>Hello, world!</greeting>]]></tag>
答案 1 :(得分:2)
如果可以通过创建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);