2011年5月29日日曜日

ウェブサイトに載せるsvg画像にはxml宣言を明記した方が良さそう

htmlのimgタグでsvg画像を使うときのお話。 このページを書いていて気づいたんですが、どうやらウェブサイトに載せるsvg画像にはxml宣言を明記した方が良いみたいです。 xml宣言を省略すると、ブラウザのOpera11がsvg画像内のtextタグでエラーを出すことがあります。

xml宣言っていうのはxmlドキュメントの先頭に書く次のような定型句です。

<?xml version="1.0" encoding="utf-8"?>

svg画像もxmlドキュメントなので書くことが推奨されています。 これはencodingがutf-8またはutf-16の場合は省略できる...ハズなんですが、Opera11は見逃してくれませんでした。

このページに「octant_circular_arcs.svg」という画像ファイルがあります。 この画像ファイルにxml宣言を書かなかった場合、テキストにある「図1. 8分円は合同」という文字列でパースエラーが検出されます。 本来、xml宣言が無いときはutf-8かutf-16のどちらかでパースされます。 utf-16として認識されたならテキストまで到達する前にエラーが出るので、utf-16扱いではないはず。 ならばutf-8で認識してくれたはず ... なんですがエラーが出たと言うことはそうでは無かったのでしょう。 imgタグが書かれているhtmlの文字コードに影響されたのか、svg画像自体の文字コード判定が外れたのかは分かりませんが、ともかくutf-8以外の何かと勘違いされました。

xml宣言を追加したらごく普通に表示されました。 ほんのひと手間ですし、無用なトラブルを避けるためにもxml宣言は書いておきましょう。