XMLデータの文字コードがUTF-8以外の場合、xml_parse_into_struct()を使って
PHP4で動いてたXMLパースがPHP5だと動かなくなる場合があります。というかまず動かない。
そういう場合、XMLの文字コードをUTF-8に変換してからパースをすると動きます。
動かないケース(ファイル文字コードEUC)
<?php $xml = <<< XML <?xml version="1.0" encoding="EUC-JP" ?> <member> <name>wes</name> <email>wesborland@limpbizkit.net</email> <memo>かっこいい</memo> </member> XML; $xp = xml_parser_create(); xml_parse_into_struct($xp, $xml, $afterdata, $after_index); var_dump($afterdata);
これだとうまくパースしてくれません
で、パース前にこれを入れてやると動きました。
$xml = str_replace('EUC', 'UTF-8', $xml);
$xml = mb_convert_encoding($xml, 'UTF-8', 'auto');
xml_parse_into_struct()以外の方法でも同様の症状があるらしいので、
PHP5でXMLパースできない場合は文字コード関連に注意してみましょう
終わり
No related posts.