データを XML ファイルとしてローカルに保存するデスクトップ AIR アプリケーションを開発しました。ユーザーがボタンをクリックすると、xml コンテンツが PHP アプリケーションにポストされ、そこでデータが処理 (挿入または更新) されます。
問題は、& や > などの html エンティティを含むデータを投稿すると、xml コンテンツが解析されないことです。
このクラスを使用して xml コンテンツを解析しています: https://sites.google.com/site/floweringmind/home
これは入力です:
<companie_ps>
<denCompanie>Company & Friends</denCompanie>
<email>abc@abc.ro</email>
</companie_ps>
これは望ましい結果です:
Array
(
[0] => Array
(
[denCompanie] => Company & Friends
[email] => abc@abc.ro
)
)
これが実際の結果です。
Array
(
[0] => Array
(
[denCompanie] => Array
(
[@content] => Company
)
)
)
エラー メッセージ: XML 解析エラー 68 'XML_ERR_NAME_REQUIRED' at line 5, column 28 (バイト インデックス 63)。
EDIT : 問題は、投稿が xml タグのコンテンツ内の html エンティティを実際の文字に変換していたという事実から発生しました。そこで、正規表現を使用して特殊文字を HTML エンティティに置き換えました。誰かがそれを必要とする場合に備えて、これはコードです:
function _handle_match($match)
{
return '<' . $match[1] . '>' . htmlentities($match[2]) . '</' . $match[3] . '>';
}
$pattern = "/\<(.*)\>(.*?)\<\/(.*)\>/imU";
$xml = preg_replace_callback($pattern, '_handle_match', $xml);