1

第一:我读过一般;不要在像这样的 XHTML 参数上使用 RegEx:RegEx 匹配除了 XHTML 自包含标签之外的开放标签,我确实理解 RegEx 在嵌套的 XHTML 或 XML 节点上将如何失败。

我不明白为什么单独操作 XML 的属性会破坏使用 RegEx。因此,一般规则似乎有例外。属性始终包含在以 a 开头并以 a<结尾的单个>节点< or >中,这会破坏 XML,因此不会发生这种情况。

现在我想清理它可能包含的任何微数据的 XHTML 字符串。即任何属性itemscopeitemtypeitemprop和。像这样的东西:itemiditemref

...
<body itemscope="itemscope" itemtype="http://schema.org/WebPage">
<div itemprop="maincontent">content</div>
...

在 PHP 中执行此操作的最佳方法是什么?

4

1 回答 1

4

我实际上建议:

  1. 使用 SimpleXML 之类的内容加载字符串。
  2. 删除您对刷新感兴趣的属性。
  3. 将其保存回字符串。

有一堆命名空间问题我不确定你必须如何处理,但这可能比尝试构建一个或多个正则表达式并确保你不会错过任何东西更干净/更快乐。

编辑:原来 SimpleXML 不起作用(修改能力有限),但 DOM 会。像这样的东西:

$data=<<<END1
<body itemscope="itemscope" itemtype="http://schema.org/WebPage">
<div itemprop="maincontent">content</div>
</body>
END1;

$xml=new DOMDocument();
$xml->loadXML($data);

// find every relevant node
$xpath = new DOMXPath($xml);
$attr = $xpath->query("//@itemscope|//@itemprop|//@itemtype");
foreach ($attr as $entry) {
  $entry->parentNode->removeAttribute($entry->nodeName);
}
echo $xml->saveXML();

您必须修改它以包含您要删除的所有属性,就像我说的那样,我不知道它将如何处理名称空间,但它是一个开始。

于 2011-06-19T19:48:00.110 回答