PHP的dom-> createTextNode会转义一些字符

时间:2009-09-01 11:02:07

标签: php xml dom escaping

我在PHP中使用dom-> createTextNode()。我看到它会自动转义字符,例如/“”等。根据PHP的手册,这是一个标准行为。

它有可能不会逃脱任何角色吗?

感谢。

2 个答案:

答案 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);