HTML用のPHPSAXパーサー?
無効なHTMLコードでも処理できるPHP用のHTMLSAX(DOMではありません!)パーサーが必要です。 私がそれを必要とする理由は、ユーザーが入力したHTMLをフィルタリングするためです(すべての属性とタグを削除します) 許可されているものを除く)、HTMLコンテンツを指定された長さに切り捨てます。
何かアイデアはありますか?
答え :
解決策:
SAXは有効なXMLを処理し、無効なマークアップで失敗するように作成されました。無効なHTMLマークアップを処理するには、SAXパーサーが通常保持するよりも多くの状態を保持する必要があります。
HTML用のSAXのようなパーサーを知りません。最善の方法は、前にHTMLを整理してからXMLパーサーを使用することですが、これにより、そもそもSAXパーサーを使用するという目的が損なわれる可能性があります。
答え :
解決策:
2つのステップとして要約:
- Tidy を使用して、「無料のHTML」を「優れたXHTML」に変換します。
- XMLパーサーを使用して、 SAX APIによってXHTMLをXMLとして解析します。
最初のTidy(!)を使用して、「無料のHTML」をXHTMLに変換します(または「想定されるXHTML」を信頼できない場合)。 cleanRepairメソッドを参照してください。時間がかかりますが、大きなファイルで実行されます(!)... 長すぎる場合は、最大実行時間として数分を設定してください。
別のオプション(大きなファイルを処理する場合)は、チェックまたはXHTMLに変換した後にXHTMLファイルをキャッシュすることです。 Tidyのrepairfileメソッドを参照してください。
「信頼できるXHTML」を使用して、SAXを使用 ... PHPでSAXを使用するにはどうすればよいですか?
SAX標準APIを使用してXMLを解析します。これは、PHPでは LibXML によって実装されます(xmlsoft.org<のLibXML2を参照)。 / a>)、そのインターフェースは PHPのXMLパーサーであり、SAX標準APIに近いものです。
「LibXML2のSAX」を別のインターフェース(従来のSAXインターフェースの代わりに PHPイテレーター)で使用する別の方法は、XMLReader<を使用することです。 /a>。 「XMLReaderuseSAX」に関するこの説明を参照してください。
はい、「SAX」または「SAX API」という用語は、PHPマニュアルでは表現されていません(!!)。 この古くて良い紹介をご覧ください。
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。