我正在 PHP 中使用 XPATH 处理符合 XML 的 XHTML 输入,如下所示:
$xml=new DOMDocument();
$xml->loadXML(utf8_encode($temp));
[...]
$temp=utf8_decode($xml->saveXML());
出现的问题是,根据 HTML5 规范,节点可能不会自动关闭,例如
<textarea id="something"></textarea>
或由 JS 利用的 div
<div id="someDiv" class="whaever"></div>
回来作为
<textarea id="something" />
and
<div id="someDiv" class="whaever" />
我目前通过使用解决这个问题str_replace
,但这是无稽之谈,因为我需要匹配个别情况。我该如何解决这个问题?
同时XPATH坚持推出
xmlns:default="http://www.w3.org/1999/xhtml
在新创建的各个节点上,它会放置类似的内容<default:p>
。我如何阻止这种情况而不诉诸愚蠢的搜索和替换,如下所示:
$temp=str_replace(' xmlns:default="http://www.w3.org/1999/xhtml" '," ",$temp);
$temp=str_replace(' xmlns:default="http://www.w3.org/1999/xhtml"'," ",$temp);
$temp=str_replace('<default:',"<",$temp);
$temp=str_replace('</default:',"</",$temp);
?
EDIT:我确实在愚蠢的搜索和替换方面遇到了麻烦,而且我不打算用 RegExp 攻击输出 XHTML。考虑这个例子:
<div id="videoPlayer0" class="videoPlayerPlacement" data-xml="video/cp_IV_a_1.xml"/>
显然,自关闭 div 是非法的(至少在一种情况下,我无法输出为 mime application/xhtml+xml 但被迫使用 mime text/html),并且在所有其他情况下它们肯定不会验证。