只要每个值都在其自己的元素内(在 SimpleXML 中,您不能单独处理文本节点,请与表中的表格进行比较,其中 DOMNodes 可以由 SimpleXMLElement 表示?)这是可能的。
正如其他人所概述的那样,这是通过urldecode
在每个元素上应用函数来实现的。
为此,您需要更改并添加一些代码行:
$xml = simplexml_load_string($xmlstring, 'SimpleXMLIterator');
if (!$xml->children()->count()) {
$nodes = [$xml];
} else {
$nodes = new RecursiveIteratorIterator($xml, RecursiveIteratorIterator::LEAVES_ONLY);
}
foreach($nodes as $node) {
$node[0] = urldecode($node);
}
此代码示例注意处理每个请假,以防万一,仅处理根元素。之后,整个文档将被更改,以便您可以按已知方式访问它。演示:
<?php
/**
* URL decode all values in XML document in PHP
* @link https://stackoverflow.com/q/17805643/367456
*/
$xmlstring = "<root><my_element>2013-06-19+07%3A20%3A51</my_element></root>";
$xml = simplexml_load_string($xmlstring, 'SimpleXMLIterator');
$nodes = $xml->children()->count()
? new RecursiveIteratorIterator(
$xml, RecursiveIteratorIterator::LEAVES_ONLY
)
: [$xml];
foreach ($nodes as $node) {
$node[0] = urldecode($node);
}
echo $value = $xml->my_element; # prints "2013-06-19 07:20:51"