人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPの質問です

PHP4.4.x スクリプトエンコーディングEUC-JP
の環境でXMLをパースしていました。問題なく動作していました。

PHP5.1.6 スクリプトエンコーディングUTF-8に環境を変えたところ
「Unsupported encoding」のエラーとなります。

予測できる原因をご教授ください。

以下にソースを記載します。(Classの一部)
ちなみに以下で出力されるエラーは
XML error: Unsupported encoding at line 1
となります。

function parseXML($data) {
$xml_parser = xml_parser_create();
xml_parser_set_option($xml_parser,XML_OPTION_CASE_FOLDING,0);
xml_set_element_handler($xml_parser, array(&$this,'startElement'), array(&$this,'endElement'));

if (!xml_parse($xml_parser, $data)) {
die(sprintf("XML error: %s at line %d",xml_error_string(xml_get_error_code($xml_parser)),xml_get_current_line_number($xml_parser)));
}

xml_parser_free($xml_parser);
return $this->xml_datas;
}
function startElement($parser, $name, $attrib) {
reset($attrib);
list($key,$val) = each($attrib);
$this->xml_datas[$key] = $val;
}
function endElement($parser, $name) {
// nothing to do
}

●質問者: masashi0316
●カテゴリ:インターネット ウェブ制作
✍キーワード:AT Class EUC-JP Key name
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● pahoo
●35ポイント

解析するXMLの文字エンコードタイプと、実体のエンコードに違いがありませんか?


たとえば、XML宣言で

<?xml version="1.0" encoding="EUC-JP" ?>

とあるにもかかわらず、POSTで受け取って parseXML($data) に渡したために、$date の実体が UTF-8 に変換されてしまっているということはないでしょうか。

◎質問者からの返答

XMLデータは以下のようになってます。

マルチバイトの文字を含んでないから、PHP側が間違って判断してるってこともありますかね?

<Parent_result>

<result result="1" />

<result redirect="[ここはurlエンコードされたURLです]" />

</Parent_result>


2 ● hatebu_music
●35ポイント ベストアンサー

xmlファイルの1行目が

<?xml version="1.0" encoding="UTF-8"?>

になっていないとか、

PHP.iniファイルの設定がEUC-JP用になってるとか。

http://www.yamada-lab.org/doc/win/mysql5/utf8/index.html

◎質問者からの返答

基本的なことを理解してなかったです。

xml_parser_createなどのマニュアルでSJISサポートって書いてあったんで考えてなかったんですけど、

スクリプトのエンコーディングと合致してないとNGなのですね?

データ側のencoding="x-sjis-cp932"のところをutf-8に変えたら解決しました。

ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ