2008年3月1日土曜日

SimpleXMLでShift_JISを使うには

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 件のコメント:

コメントを投稿