【问题标题】:PHP's dom->createTextNode escapes some characthersPHP 的 dom->createTextNode 转义了一些字符
【发布时间】:2009-09-01 11:02:06
【问题描述】:

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

有没有可能它不转义任何字符?

谢谢。

【问题讨论】:

  • 你可能做错了什么。对我来说,这并没有逃避任何事情。粘贴一些代码。

标签: php xml dom escaping


【解决方案1】:

如果某些字符没有被转义,你最终可能得不到一个有效的 XML 文件。

如果您不想转义任何字符,也许使用DOMDocument::createCDATASection 在您的 XML 文件中获取 CDATA sections 会有所帮助。

不过,请注意,您会在您的 XML 中得到那种东西(嗯,CDATA 部分)

<tag><![CDATA[<greeting>Hello, world!</greeting>]]></tag>

【讨论】:

  • 这只有在你使用saveXml()时才有效,当你使用saveHTML()时该怎么办?
【解决方案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);

【讨论】:

    猜你喜欢
    • 2015-01-03
    • 2016-10-02
    • 2017-03-21
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    相关资源
    最近更新 更多