2013-01-17

[PHP] simplexml_load_fileで、 EntityRef: expectingのエラー

XMLファイルを読み込んで内容を表示するというシンプルなページを作っていたのですが、
XMLファイルの内容にURLの情報があり、そこに&(アンパサンド)があると
parser error : EntityRef: expecting ‘;’ といったエラーが発生してしまいました。

PHP側ではsimplexml_load_fileを使用しているし、
XMLファイルは自分以外の人が編集しているので、&に変えてもらうわけにもいかずで、
何か回避策がないか調べてみました。

どうやら、file_get_contents関数でXMLファイルの内容を読み込んで、
preg_replaceを使って変換、そしてsimplexml_load_stringで値を取得という
流れにすればうまくいくようです。

$xmlfile = file_get_contents("test.xml");
$temp_xml = preg_replace('/&(?=[a-z_0-9]+=)/m','&',$xmlfile);
$xml = simplexml_load_string($temp_xml);


参考サイト
http://watanabeyu.blogspot.jp/2012/12/xmlentityref.html

Comment:

Trackback URL: