XMLパースエラーの罠

RDFを吐くプログラムをつくってて、ちょっとハマッたのでメモ。

例えば

<rdf:li rdf:resource=”http://www.example.net/hoge.php?id=12345&cmd=add” />

というような書き方をすると、RDFとして認識してくれない。
というより、XMLとしてエラーになるようだ。

試しに、Firefoxに食わせてみると

XML パースエラー: 整形式になっていません

というようなエラーが出る。

この原因は、どうも “&” という文字にあるらしい。

XML文中にこの文字があると、その先を別の文字への置き換えとみなそうとするらしい。
&lt; とか &gt; とか &quot; とか &apos; というやつね。

上記の場合、”&cmd=” などという定義はないので、そこでエラーになる。

XML文中に現れる “&” は、全て “&amp;” に置換する必要がある。

URLも全てこれに置き換えないといけないというのは参ったですよ。
だって、別のURLになっちゃうじゃん?って思うでしょ。
でも “&amp;” って書けば、ちゃんと “&” で認識してくれる。

PHPでやる場合、文字列の部分は htmlspecialchars をかけてやればOK。

これは罠だ。

タイトルとURLをコピーしました