以下のような XML をオブジェクトとして代入しようとしました。
1 2 3 4 5 6 7 8 | <?xml version='1.0' encoding='UTF-8'?> <test> <item> <id>100</id> <name>テスト&テスト</name> <date>2011-06-01 18:27:36</date> </item> </test> |
しかしなぜか以下のようなエラーが出て simplexml_load_string() でオブジェクトとして代入することができません。
Warning (2): simplexml_load_string() [http://php.net/function.simplexml-load-string]: Entity: line 17: parser error : EntityRef: expecting ‘;’ [APP/views/calorie/calorie.ctp, line 53]
調べてみたところ以下の問題に該当していたようです。
XML Parsing Error: EntityRef: expecting ‘;’ URLのパラメータの区切りによく使われる”&”など半角記号は、XHTMLでは直接使ってはいけない。例えば ” (ダブルクォーテーション)は " と、「& とアルファベットと ; 」で表現するみたい。つまり & を使うと「& とアルファベットと ; 」と勘違いして、「& を使ってるくせに ; がねえぞ!ゴルァ!」とお怒りになるわけ。なので、& は & に置き換える。
ということは XML を生成する時は htmlspecialchars() を通してエスケープ処理をしておくと良さそうです。
1 | htmlspecialchars('テスト&テスト'); |
結果以下のような XML となりオブジェクトとして代入することができます。
1 2 3 4 5 6 7 8 | <?xml version='1.0' encoding='UTF-8'?> <test> <item> <id>100</id> <name>テスト&テスト</name> <date>2011-06-01 18:27:36</date> </item> </test> |
コメント