9

私のコードでは、openoffice を使用してスタイル付きの xls ドキュメントを html に変換しています。次に、を使用してテーブルを解析しxml_parser_createます。問題は、openoffice が unclosed<BR><HR>タグを含む oldschool html を作成し、doctypes を作成せず、属性を引用しないことです<TABLE WIDTH=4>

私が知っている php パーサーはこれを好まず、xml フォーマット エラーを生成します。私の現在の解決策は、ファイルを解析する前にファイルに対していくつかの正規表現を実行することですが、これはうまくも速くもありません。

この種の間違いを気にしない (できれば含まれている) php-parser を知っていますか? それとも、「壊れた」html を修正する簡単な方法でしょうか?

4

4 に答える 4

8

壊れた HTML を「修正」する解決策は、HTMLPurifier (引用)を使用することです。

HTML Purifier は、PHP で書かれた標準準拠の HTML フィルター ライブラリです。
HTML Purifier は、完全に監査された安全で許容的なホワイトリストを使用して、すべての悪意のあるコード (XSS として知られている) を削除するだけでなく 、ドキュメントが標準に準拠していることを確認します。


別のアイデアは、HTML を(quoting) でロードしてみることです。DOMDocument::loadHTML

この関数は、文字列 source に含まれる HTML を解析します。XML のロードとは異なり、HTML はロードするために整形式である必要はありません

ファイルから HTML を読み込もうとしている場合は、 を参照してくださいDOMDocument::loadHTMLFile

于 2010-02-28T15:40:44.657 に答える
4

SimpleHTMLあり

壊れた HTML を修復するには、 Tidyを使用できます。

代わりに、ネイティブのXML Readerを使用できます。ドキュメント ストリームを進み、途中の各ノードで停止するカーソルとして機能するため、無効な XML ドキュメントで中断することはありません。

http://www.ibm.com/developerworks/library/x-pullparsingphp.htmlを参照してください。

于 2010-02-28T15:40:41.957 に答える
1

まだ PHP 4 XML API を使用している特定の理由はありますか?

PHP 5 の XML API を使用して問題を解決できる場合、2 つの可能性があります。

まず、組み込みの HTML パーサーを試してください。これは実際にはあまり良くありません (フォーマットが不十分な HTML では詰まる傾向があります) が、うまくいくかもしれません。DomDocument::LoadHTML を見てください。

2 番目のオプション - HTML5 パーサー仕様に基づく HTML パーサーを試すことができます。

http://code.google.com/p/html5lib/

これは、組み込みの PHP HTML パーサーよりもうまく機能する傾向があります。HTML を DomDocument オブジェクトにロードします。

于 2010-02-28T16:27:41.763 に答える