PHPのSimpleXMLはShift_JISに対応していないので、simplexml_load_string()やsimplexml_load_file()の前にSimpleXML内の文字コードであるUTF-8に変換しておく必要がある。
ただし、SimpleXMLはXMLの先頭にあるXML宣言の中のencoding属性を読み取って、それに基づいて文字コード変換をするので、このencoding属性も変えなければならない。
元のXML(Shift_JIS)
<?xml version="1.0" encoding="Shift_JIS" ?>
<root>
<element>
<child>foo</child>
<child>bar</child>
<child>baz</child>
</element>
</root>
文字コードとXML宣言を変換
$str = mb_convert_encoding(file_get_contents($path), 'UTF-8', 'SJIS');
$arr = explode("n", $str, 2); //この例ではXML宣言の後に改行している場合のでそこで区切った
$xml = simplexml_load_string('<?xml version="1.0" encoding="UTF-8" ?>' . $arr[1]);
できあがったXMLのイメージ
<?xml version="1.0" encoding="UTF-8" ?>
<root>
<element>
<child>foo</child>
<child>bar</child>
<child>baz</child>
</element>
</root>
参考: SJIS、EUC-JP、JISなどの日本語をSimpleXMLで使う方法 - PHP::PEAR - dozo PukiWiki
0 件のコメント:
コメントを投稿