[英]Stripping microdata from an XHTML with PHP - using RegEx?
第一:我讀過將軍; 不要像這樣對XHTML參數使用RegEx: RegEx匹配除XHTML自包含標記之外的開放標記 ,我確實理解RegEx如何在嵌套的XHTML或XML節點上失敗。
我不明白為什么單獨操作XML的屬性應該使用RegEx中斷。 所以一般規則似乎有例外。 屬性總是包含在單個節點中,以<
開頭並以<
結尾>
中間的任何其他< or >
會破壞XML,因此不會發生這種情況。
現在我想清理它可能包含的任何微數據的XHTML字符串。 這是任何屬性itemscope
, itemtype
, itemprop
, itemid
和itemref
。 像這樣的東西:
...
<body itemscope="itemscope" itemtype="http://schema.org/WebPage">
<div itemprop="maincontent">content</div>
...
在PHP中執行此操作的最佳方法是什么?
我實際建議:
有一堆命名空間問題,我不確定你將如何處理,但這可能比嘗試構建一個或多個正則表達式更清潔/更快樂,並確保你不會錯過任何東西。
編輯:事實證明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.