みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

xml_parseで実体参照が無視される

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
----------------------

投稿日時 - 2008-10-09 11:58:03

QNo.4388639

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

ANo.1です。

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

投稿日時 - 2008-10-10 15:56:39

補足

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

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

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

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

投稿日時 - 2008-10-13 20:42:50

ANo.1

以下をそのまま貼り付けて実行してみましたが"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>");

投稿日時 - 2008-10-10 00:01:47

補足

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

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

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

投稿日時 - 2008-10-10 14:22:25

あなたにオススメの質問