【问题标题】:PHP DOMNode entities and nodeValuePHP DOMNode 实体和 nodeValue
【发布时间】:2010-05-02 04:19:04
【问题描述】:

当获取在 nodeValue 中具有实体的 DOMNode 对象的 nodeValue(即 a & gt;)时,它会将实体转换为其可打印字符(即 >)

有没有人知道一种让它保持实体的方法,当它转换为意想不到的东西时,它真的会搞乱字符串比较。

以下代码重现了您会注意到转储长度为 3 而应该为 6 的问题。

<?php
$xml='<?xml version="1.0"?>
<root>
<element>&gt;</element>
</root>';
$a=new DOMDocument();
$a->loadXML($xml);
var_dump($a->childNodes->item(0)->nodeValue);

【问题讨论】:

    标签: php dom


    【解决方案1】:

    loadXML() 采用options 参数,其中一个选项是LIBXML_NOENT,它允许将实体转换为其表示,因此默认情况下loadXML() 不应该这样做。但是,根据this bug report

    的说法,libxml 中似乎有一个错误导致它一直发生

    【讨论】:

    • 谢谢你,可惜这是一个错误,看来我必须通过 htmlentities 进行比较。
    • 太棒了! 5 年过去了,这仍然是一个问题(Debian 6)。 LTS 是否意味着它不能解决此类问题,还是有很多代码依赖于这个 bug?
    猜你喜欢
    • 2013-06-23
    • 2011-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 2011-05-11
    • 2012-09-05
    • 2011-05-29
    相关资源
    最近更新 更多