2011-06-19 20 views
1

最初に私は一般を読んだ。このようなXHTML引数にRegExを使用しないでください:RegEx match open tags except XHTML self-contained tagsと、ネストされたXHTMLまたはXMLノードでRegExが失敗する方法を理解しています。RegExを使用してPHPを使用したXHTMLからのマイクロデータの削除?

XMLの属性を操作するだけで、RegExを使用して分割する必要はありません。だから、一般ルールの例外があるようです。属性は、常に<で始まり、>で終わる単一のノードに含まれ、他のいずれかの<or>がXMLを壊すので、このようなことは起こりません。

ここでは、含まれる可能性のあるすべてのマイクロデータのXHTML文字列をクリーニングしたいと考えています。これは、任意の属性です。itemscopeitemtypeitempropitemid、およびitemrefです。このようなもの:

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

これを行うには、どのような方法が最適ですか?

+0

HTMLからマイクロデータ属性を消去する場合は、HTMLPurifierまたはhtmltidyで十分です。どちらもhtml5属性を認識しておらず、それらを削除しません。 – mario

答えて

4

私は実際にお勧めしたい:

  1. はSimpleXMLをのようなものを持つ文字列をロードします。
  2. フラッシングに関心のある属性を削除する。
  3. 文字列に戻して保存します。

は、私はあなたが扱う必要があるだろうかわからない名前空間の問題の束がありますが、それはおそらく、きれいになります/一つ以上の正規表現式を作成し、あなたが「ドンことを確認しようとするよりも幸せ何かお見逃しなく。

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

あなたはそれはあなたが削除したいすべての属性を含めるように変更する必要があるだろう、など私はそれが名前空間に対処する方法を見当もつかないが、そのスタートと述べました。

+0

素晴らしいですね。もう一つ、マイクロデータのために身体にメタタグが存在する可能性があります。私はxpath 'body // meta'を持つものを選択できると思っていましたが、どういうわけかまだ動作しません... –

+0

上記のクエリは属性で動作します:あなたは '// body/meta'を実行したいと思っています。それらは 'removeAttribute'を使用できない属性ではありません。最も簡単な方法は、タグを別のxpathループに入れて、代わりに 'removeChild'を使うことです。私が理解した – Femi

+0

。私はそれを別のxpathループにして、removeChildを使いました。それはマニュアルにあります。 '$ xpath-> query($ body) - > getElementsByTagName(" body ") - > getElementsByTagName(" meta ") - > length;'実際のタグ数を返します。 ( "// body") - > length'は '0'を返します。私はxpathの問題が何であるか不思議でした。 '$ xpath-> query(" // @ itemscope ") - > length;'という属性を使って同じことを試しています... –

関連する問題