3

PHP で不正な形式の XML を解析する際に問題が発生しています。特に、実際のデータで XML エンティティをエンコードせずに XML 形式でデータを返すサード パーティの Web サービスにクエリを実行しています。たとえば、エレメントの 1 つに引用符なしの ASCII ハート「<3」が含まれており、XML パーサーはこれを開始タグと見なします。'<3' である必要があります。

今のところ、単純に XML 文字列を SimpleXMLElement に渡しているだけですが、予想通り、これらのインスタンスでは失敗します。いろいろ調べてみたところ、PHP Tidy パッケージが役に立ちそうな気がしますが、できる構成の量は圧倒的です :(

したがって、他の誰かがこのような問題を抱えているかどうか、もしそうなら、どうやってそれを解決できたのか疑問に思っています.

ありがとう!

4

2 に答える 2

5

tidy.repairString を試してください:

php > $tidy = new tidy();
php > $repaired = $tidy->repairString("<foo>I <3 Philadelphia</foo>", array("input-xml"=>1));
php > print($repaired);
<foo>I &lt;3 Philadelphia</foo>
php > $el = new SimpleXMLElement($repaired);
于 2009-06-25T19:56:06.650 に答える
-1
  1. コンテンツを文字列として読み取ります。
  2. htmlspecialchars(preg_replace('/[\x-\x8\xb-\xc\xe-\x1f]/','',$string))
  3. 変換された文字列を SimpleXMLElement にロードします

これまでのところうまくいきました。

于 2009-06-25T19:57:18.567 に答える