[XML] URLがパースエラーになる罠

この記事は3年以上前に書かれた記事です。情報が古い可能性があります。

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;” に置換する必要がある。

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

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