PHP XML编码正则表达式

PHP XML编码正则表达式,php,xml,regex,urlencode,Php,Xml,Regex,Urlencode,我需要找到一种方法对xml标记中的值进行URL编码,但使用PHP保持标记的完整性。 也许可以使用正则表达式检查元素中没有标记的开始标记和结束标记。 或者最好在和之间查找数据,这对于DOMDocument/DOMXPath来说相当简单。您只需查询所有非空文本节点,并使用urlencoded text更新它们 $dom = new DOMDocument; $dom->loadXML($xml); $xpath = new DOMXPath($dom); foreach ($xpath->

我需要找到一种方法对xml标记中的值进行URL编码,但使用PHP保持标记的完整性。 也许可以使用正则表达式检查元素中没有标记的开始标记和结束标记。
或者最好在
之间查找数据,这对于DOMDocument/DOMXPath来说相当简单。您只需查询所有非空文本节点,并使用urlencoded text更新它们

$dom = new DOMDocument;
$dom->loadXML($xml);
$xpath = new DOMXPath($dom);
foreach ($xpath->query('//text()[normalize-space()]') as $textNode) {
    $textNode->parentNode->replaceChild($dom->createTextNode(
        urlencode($textNode->nodeValue)), $textNode);
}
echo $dom->saveXML();

谢谢,我明天会在工作中尝试这个方法,如果它解决了问题,我会接受这个答案。你能解释一下为什么需要对这些textnode值进行URL编码吗?
<?xml version="1.0"?>
    <catalog>
       <book>
          <author>Gambardella%2C+Matthew</author>
          <title>XML+Developer%27s+Guide</title>
          <genre>Computer</genre>
          <price>44.95</price>
          <publish_date>2000-10-01</publish_date>
          <description>An+in-depth+look+at+creating+applications+with+XML.</description>
       </book>
       <book>
          <author>Ralls%2C+Kim</author>
          <title>Midnight+Rain</title>
          <genre>Fantasy</genre>
          <price>5.95</price>
          <publish_date>2000-12-16</publish_date>
          <description>A+former+architect+battles+corporate+zombies%2C+an+evil+sorceress%2C+and+her+own+childhood+to+become+queen+of+the+world.</description>
       </book>
    </catalog>
$dom = new DOMDocument;
$dom->loadXML($xml);
$xpath = new DOMXPath($dom);
foreach ($xpath->query('//text()[normalize-space()]') as $textNode) {
    $textNode->parentNode->replaceChild($dom->createTextNode(
        urlencode($textNode->nodeValue)), $textNode);
}
echo $dom->saveXML();