【问题标题】:PHP DOMDocument does not keep numeric presentation of HTML special charactersPHP DOMDocument 不保留 HTML 特殊字符的数字表示
【发布时间】:2013-10-14 01:56:19
【问题描述】:

我有一个 DOMDocument,想添加一些节点。

在其中一个节点上,我想放:

$copyrightStatementText = "© This is the CopyRight";

问题在于函数:

$copyrightStatement = $dom_output->createElement('copyright-statement', $copyrightStatementText);

正在将© 立即转换为©。

我的目标是保留©

知道我该怎么做吗?

【问题讨论】:

    标签: php html xml dom special-characters


    【解决方案1】:

    来自DOMDocument::createElement()

    注意: value被转义。使用DOMDocument::createTextNode() 创建具有转义支持的文本节点。

    所以请改用DOMDocument::createTextNode()

    $copyrightString = "© This is the Copyright";
    $copyrightNode = $dom_output->createTextNode($copyrightString);
    $copyrightContainer = $dom_output->createElement('copyright-statement');
    
    $copyrightContainer->appendChild($copyrightNode);
    

    【讨论】:

    • 非常感谢@André,但是如何将“copyright-statement”属性应用于 createTextNode ?
    • @Milos createElement() 的第一个参数定义了元素的标签名称,因此假设您确实想要<copyright-statement></copyright-statement> 标签,您可以先使用createElement() 创建空元素,然后添加以createTextNode() 作为子节点创建的文本节点。请参阅我的更新答案。
    • 我明白了。现在出现了另一个问题:来自© 的amparsan 也被转换为&amp 并且不应该。所以,我收到©。有什么想法吗?
    • 奇怪,就我而言,这是生成&amp
    • @Milos 您如何查看输出?我假设您正在基于“xml”标签生成 XML,但如果您在浏览器中查看结果,则可以想象浏览器在查看时正在对 & 符号 进行编码。您是否验证了源 XML 文档包含 ©©?如果您检查来自my sample code 的生成输出的来源,您可以看到它确实是&#000A9;
    猜你喜欢
    • 2011-04-23
    • 2013-08-25
    • 2011-09-28
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    • 2018-08-05
    • 2013-03-21
    • 2019-02-13
    相关资源
    最近更新 更多