【PHP】simplexml_load_stringでXML読込時にバイトエラーが出た



simplexml_load_stringを使ってXMLを読み込み時にバイトエラーが発生した時の対処方法。
simplexml_load_stringにてXMLを読もうとしたらエラーが発生・・・
Warning: simplexml_load_string(): input conversion failed due to input error, bytes 0x85 0xE3 0x80 0x80

原因

原因は文字コードでした。
UTF-8の環境でSJISのXMLを読み込もうとして発生。
mb_convert_encodingを使用して文字コードを変換するだけではXMLの読み込みが出来ないってのが原因でした。

対処方法

対処方法としては以下の手順を実行。
1.文字コードを変換(SJIS→UTF-8)
2.XMLの定義を変更(encoding=”Shift_JIS” → encoding=”UTF-8″)

以下が対応用のソースとなります。
// 読み込むXMLを指定
$xml_url = 'hoge.xml';

// XMLを取得してSJIS→UTF-8に変換
$xml_str = mb_convert_encoding(file_get_contents($xml_url), 'UTF-8', 'SJIS');

// XMLの定義をShift_JIS→UTF-8に変換
$xml_str = str_replace('encoding="Shift_JIS"', 'encoding="UTF-8"', $xml_str );

// XML文字列を読み込む
$xml_data = simplexml_load_string($xml_str);

上記のソースの通りにしたらちゃんと読み込むことが出来ました。

私は外部とのXML連携にて文字コードが違う時に発生したのですが、気をつけないといけませんね。


コメントを残す