簡體   English   中英

使用PHP從XHTML中剝離微數據 - 使用RegEx?

[英]Stripping microdata from an XHTML with PHP - using RegEx?

第一:我讀過將軍; 不要像這樣對XHTML參數使用RegEx: RegEx匹配除XHTML自包含標記之外的開放標記 ,我確實理解RegEx如何在嵌套的XHTML或XML節點上失敗。

我不明白為什么單獨操作XML的屬性應該使用RegEx中斷。 所以一般規則似乎有例外。 屬性總是包含在單個節點中,以<開頭並以<結尾>中間的任何其他< or >會破壞XML,因此不會發生這種情況。

現在我想清理它可能包含的任何微數據的XHTML字符串。 這是任何屬性itemscopeitemtypeitempropitemiditemref 像這樣的東西:

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

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

我實際建議:

  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();

你必須修改它以包含你想要刪除的所有屬性,就像我說我不知道​​它如何處理命名空間,但它是一個開始。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM