Php DOMELENT nodeValue不一致get vs set

Php DOMELENT nodeValue不一致get vs set,php,dom,Php,Dom,我刚刚发现,当从domeElement读取nodeValue时,它返回原始值(即未编码),但当设置值时,必须首先对其进行编码,否则它会截断第一个无效实体处的文本 <?php $doc = new DOMDocument('1.0', 'UTF-8'); $element_p = $doc->createElement('p'); // DOMElement $element_p->nodeValue = 'This & that.'); print($element_p

我刚刚发现,当从domeElement读取nodeValue时,它返回原始值(即未编码),但当设置值时,必须首先对其进行编码,否则它会截断第一个无效实体处的文本

<?php
$doc = new DOMDocument('1.0', 'UTF-8');
$element_p = $doc->createElement('p'); // DOMElement
$element_p->nodeValue = 'This & that.');
print($element_p->nodeValue); // 'This '

$element_p->nodeValue = 'This &amp; that.');
print($element_p->nodeValue); // 'This & that.'

// Setting it to itself truncates the text!
$element_p->nodeValue = $element_p->nodeValue;
print($element_p->nodeValue); // 'This '

// Encode before setting, don't decode after getting
$element_p->nodeValue = htmlspecialchars('This & that.');
print($element_p->nodeValue); // 'This & that.'

// Using htmlspecialchars() preserves the original text
$element_p->nodeValue = htmlspecialchars($element_p->nodeValue);
print($element_p->nodeValue); // 'This & that.'

Yes这是aik所期望的,因为您实际上应该附加一个textnode。所以
$element\u p->appendChild($doc->createTextNode('This&that'))
@PeeHaa这一定是我在代码中其他地方所做的,因为我不记得以前必须使用
htmlspecialchars()
才能使它工作,而且我使用了大量需要转换为实体的字符。我仍然觉得get和set的格式不一样有些奇怪。但话说回来,这是PHP!在这个特定的例子中,与其说它是PHP,不如说它是DOM;)是的,这是预期的AFAIK,因为您实际上应该附加一个textnode。所以
$element\u p->appendChild($doc->createTextNode('This&that'))
@PeeHaa这一定是我在代码中其他地方所做的,因为我不记得以前必须使用
htmlspecialchars()
才能使它工作,而且我使用了大量需要转换为实体的字符。我仍然觉得get和set的格式不一样有些奇怪。但话说回来,这是PHP!在这个特定的例子中,与其说它是PHP,不如说它是DOM;)是的,这是预期的AFAIK,因为您实际上应该附加一个textnode。所以
$element\u p->appendChild($doc->createTextNode('This&that'))
@PeeHaa这一定是我在代码中其他地方所做的,因为我不记得以前必须使用
htmlspecialchars()
才能使它工作,而且我使用了大量需要转换为实体的字符。我仍然觉得get和set的格式不一样有些奇怪。但话说回来,这是PHP!在这个特定的例子中,与其说它是PHP,不如说它是DOM;)