1

最初に:私は一般を読みました。このようなXHTML引数でRegExを使用しないでください。RegExはXHTML自己完結型タグを除いてオープンタグと一致し、ネストされたXHTMLまたはXMLノードでRegExがどのように失敗するかを理解しています。

XMLの属性を操作するだけでRegExを使用すると壊れてしまう理由がわかりません。したがって、一般的な規則には例外があるようです。属性は常にaで始まり、その間にある他のノード<で終わる単一のノードに含まれているため、XMLが破損するため、このような事態は発生しません。>< or >

次に、含まれている可能性のあるマイクロデータのXHTML文字列をクリーンアップしたいと思います。これは、任意の属性、、、、itemscopeおよびです。このようなもの:itemtypeitempropitemiditemref

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

PHPでこれを行うための最良の方法は何ですか?

4

1 に答える 1

4

私は実際に提案します:

  1. SimpleXML のようなもので文字列をロードします。
  2. フラッシュしたい属性を削除します。
  3. それを文字列に保存します。

どのように処理する必要があるのか​​ よくわからない名前空間の問題がたくさんありますが、1つまたは複数の正規表現を構築して何も見逃さないようにするよりも、おそらくクリーン/ハッピーになるでしょう。

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

削除したいすべての属性を含めるように変更する必要があります。先ほど言ったように、名前空間をどのように処理するかはわかりませんが、それが始まりです。

于 2011-06-19T19:48:00.110 に答える