外部ソースから取得した XML ドキュメントを PHP にロードする必要があります。XML はエンコーディングを宣言しておらず、 のような不正な文字を含んでいます&
。XML ドキュメントをブラウザに直接ロードしようとすると、「テキスト コンテンツに無効な文字が見つかりました」などのエラーが表示されます。また、PHP でファイルをロードするときにも、次のような多くの警告が表示されxmlParseEntityRef: no name in Entity
ますInput is not proper UTF-8, indicate encoding ! Bytes: 0x9C 0x31 0x21 0x3C
。
XML の形式が正しくなく、XML エンティティに変換する必要がある不正な文字が含まれていることは明らかです。
これは、XML フィードが他の多くのユーザーから提供されたデータで構成されており、明らかにそれを取得する前に検証または再フォーマットされていないためです。
XML フィードの供給者と話したところ、彼らはコンテンツ プロバイダーにそれを整理させようとしているとのことですが、最初に入力を検証する必要があるため、これはばかげているように思えます。
PHP の DOMDocument 関数を使用するときに XML が問題をロードするように、エンコード エラーを修正し、不正な文字を XML エンティティに変換して XML を修正する必要があります。
私のコードは現在次のようになっています:
$feedURL = '3704017_14022010_050004.xml';
$dom = new DOMDocument();
$dom->load($feedURL);
エンコードの問題を示す XML ファイルの例 (クリックしてダウンロード): feed.xml
XML エンティティに変換されていない文字を含む XML の例:
<?xml version="1.0"?>
<feed>
<RECORD>
<ID>117387</ID>
<ADVERTISERNAME>Test</ADVERTISERNAME>
<AID>10544740</AID>
<NAME>This & This</NAME>
<DESCRIPTION>For one day only this is > than this.</DESCRIPTION>
</RECORD>
</feed>