【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連携にて文字コードが違う時に発生したのですが、気をつけないといけませんね。
«前の記事:存在チェックINSERT文 重複行を挿入しない方法脆弱性情報のデータベース 「JVN iPedia」:次の記事»