BLOG ENTRY

PHP5でxml_parse_into_struct()でXMLをパースできない

php

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.

WRITE COMMENT


(required)


(required)


(required)

MENU

veltica creative of twitter