PHP:XML の解析を simplexml_load_file() 関数で取得しようとしたらエラーが発生した

PHP で XML データの解析に便利な simplexml_load_file() や simplexml_load_string() ですが、RSS などの解析をしていたときに「PCDATA invalid Char」や「parser error : Char 0x0 out of allowed range」といったエラーに遭遇しました。

その原因と回避策をメモ。

原因

制御コードがデータに混じっているのが原因です。

先ほどのエラーでも、ヌル文字が入ってるよと言われています。

ですので、制御コードは省けば良いのですね。
(出力側がちゃんと管理しろよと思うけれども)

解決したコード

[code lang=’php’] //データは文字列として取得
$s = @file_get_contents($url);

//0x00~0x0f のうち、タブ(0x09)・改行(0x0a)・復帰(0x0c)を除いて削除
$controlCode = array(“\x00”, “\x01”, “\x02”, “\x03”, “\x04”, “\x05”, “\x06”, “\x07”, “\x08”, “\x0b”, “\x0c”, “\x0e”, “\x0f”);
$s = str_replace($controlCode, ”, $s);

//処理した文字列を simplexml 関数に読み込ませる
$xml = simplexml_load_string($s);
[/code]

単純に、いらないコードは空文字に置換するコードです。

今回の問題以外にも、別の文字コードが値や属性値に含まれていたりする可能性も否定できないのが、他サービスに依存する場合に気にかかるところですね。

え?Webサイトのバックアップ、してないの!?

いざという時には復旧までしてくれる
『ワードプレス外部バックアップサービス』

■3つの特長
・自分でやらなくて良い
・いざという時の復旧付き
・外部サーバーにバックアップ

PHP:XML の解析を simplexml_load_file() 関数で取得しようとしたらエラーが発生した” に対して1件のコメントがあります。

コメントを残す