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
}

回答の条件
  • 1人2回まで
  • 登録:2008/09/06 15:24:29
  • 終了:2008/09/06 16:30:38

ベストアンサー

id:hatebu_music No.2

hatebu_music回答回数61ベストアンサー獲得回数22008/09/06 16:01:21

ポイント35pt

xmlファイルの1行目が

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

になっていないとか、

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

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

id:masashi0316

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

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

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

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

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

2008/09/06 16:30:26

その他の回答(1件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332008/09/06 15:51:04

ポイント35pt

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


たとえば、XML宣言で

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

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

id:masashi0316

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

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

<Parent_result>

<result result="1" />

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

</Parent_result>

2008/09/06 16:23:15
id:hatebu_music No.2

hatebu_music回答回数61ベストアンサー獲得回数22008/09/06 16:01:21ここでベストアンサー

ポイント35pt

xmlファイルの1行目が

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

になっていないとか、

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

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

id:masashi0316

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

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

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

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

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

2008/09/06 16:30:26
  • id:masashi0316
    お礼を忘れてしまった。
    お二方ともありがとうございました。
    また、よろしくお願いします。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません