プロが教える店舗&オフィスのセキュリティ対策術

phpでxmlをparseするコードを作成していますが、
動きが良く分からないものがあったので質問です。

以下のような、XMLがあります。
・XML
<a>1&lt;2<a>

これを以下のようなPHPでparseします。
・php
function func_char($parser, $data){
print "char: $data\n";
}
$parser = xml_parser_create();
xml_set_character_data_handler($parser , "func_char");
xml_parse($parser, "<a>1&lt;2<a>");

出力が以下のようになります。
・出力結果
 char: 1
 char: 2
間に"char: <"が出力されるかと思ったのですが、出力されません。

何か心当たりのある方はいらっしゃいますでしょうか?

実行環境
----------------------
OS:CentOS 5.2
Apache 2.2.9
php 5.2.6
libxml2 2.7.2
----------------------

A 回答 (2件)

以下をそのまま貼り付けて実行してみましたが"char: <"も出力されました。


実際に使われているコードですか?

function func_char($parser, $data){
print "char: $data\n";
}
$parser = xml_parser_create();
xml_set_character_data_handler($parser , "func_char");
xml_parse($parser, "<a>1&lt;2<a>");

この回答への補足

ご回答ありがとうございます。

コードは簡略化したものです。
実際にはXMLが違ったりparserにオプションを指定したりしています。

PHPやlibxml2のバージョンを下げたりしてみましたが、
実行結果は同じでした。

補足日時:2008/10/10 14:22
    • good
    • 0

ANo.1です。



つまり実際上手くいっていないものとは別のコードということですね。
では、この(質問に書かれている)コードを実行してみた結果はどうですか?

この回答への補足

返事が遅くなってしまい誠に申し訳ありません。

私がこの質問に書いたコードを実行してみると、
"char: <"は出力されません。

他の実行環境(OSやPHPのバージョンが違います)もあるのですが、
そこで実行すると期待通りに"char: <"が出力されます。

ネット等で散々調べたのですが結局原因は分かりませんでした。
とりあえず、CDATAを使って"<"が消える現象を回避しようかと思っています。
<a><![CDATA[1&lt;2]]><a>

補足日時:2008/10/13 20:42
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!