稀にある encoding="Shift_JIS"
であるにも関わらず丸数字が使われている XML は、
SimpleXML で読むと次のようなエラーになり読むことが出来ません(DOM も libxml に基づくので同様です)。
simplexml_load_file(): ~~~ parser error : switching encoding: encoder error
encoding="Shift_JIS"
の部分を encoding="Windows-31J"
とかに置換すれば読めますが、
事前にエンコーディングがわかっているなら mbstring の HTML-ENTITIES
を使って次のように読むことが出来ます。
<?php // XML ファイルの読み込み $data = file_get_contents(__DIR__ . '/xxx.xml'); // マルチバイト文字をHTMLエンティティに変換 $data = mb_convert_encoding($data, 'HTML-ENTITIES', 'SJIS-win'); // SimpleXML で文字列から読み込み $xml = simplexml_load_string($data);
元ネタは php-users ML の これ です。どちらかというと XML よりも DOMDocument::loadHTML()
で HTML を読むときのエンコーディング判別が上手くいかないときに使えるかもしれません。