(X)HTMLにおいて属性値をダブルクオテーションでくくる習慣はどこから来たの?
なぜだか分かりませんが、WordPressのいくつかのテンプレートタグでは、属性値をシングルクオテーション(単引用符)でくくって出力します。例えば、こんな感じ。
<link rel='index' title='NPtech.jp' href='http://www.nptech.jp' />
「これ、なんかキモイ!」と思っていたのですが、仕様では特に問題ありません。
デフォルトでは、SGML規定はすべての属性値を二重引用符(ASCII十進34)または単引用符(ASCII十進39)のどちらかを用いて 囲うよう求めている。
http://www.asahi-net.or.jp/~SD5A-UCD/rec-html401j/intro/sgmltut.html#h-3.2.2
ふむ、しかし、ぼく自身が単引用符でくくることはほとんどないし、ほかの人たちのコードを覗いてみても単引用符を使っているのを見た記憶もありません。なぜ、単引用符も二重引用符も大丈夫なのに、二重引用符を使うことが習慣化しているんでしょう。
そこで、Twitterで質問してみました。
素朴な疑問なんだけど、HTMLの属性は単引用符でも二重引用符のどちらでもOKなんだろうけど、なんで二重引用符を使うことが一方的に多いんだろう。
http://twitter.com/aratakojima/status/6113509734
みなさんの回答
lilyfanjp
http://twitter.com/lilyfanjp/status/6113552746
@aratakojima SQL インジェクション防止のためでしょう。XSS 防止のためにはシングル/ダブルあまり関係ないですが、SQL インジェクションはシングルクォートが原因になるため、それとは違う文字の方が安全です。
cnkt
http://twitter.com/cnkt/status/6113571214
@aratakojima 単引用符は解釈できないUAがあった気が(これからおふろなのでぐぐってないけど
lilyfanjp
http://twitter.com/lilyfanjp/status/6113571738
@aratakojima あと、HTML の初期はダブルクォートしかだめだったような記憶が (あやふやなので確認が必要)
hira
http://twitter.com/hira/status/6113679656
@aratakojima ダブルの方が安定度が高いっぽいって書いて有ったりしました。
motchie
http://twitter.com/motchie/status/6113835351
@aratakojima @cnkt もしかしてやけど、SGMLが二重引用符だけなんちゃう? http://www.utj.co.jp/xml/beg/sgml/sgml2_4.html
うーん、全部ありそうで、確定的なことは言えないような気も。
そのあとしばらくしてから、こんなRTをいただきました。
_masaka
http://twitter.com/_masaka/status/6115182687
ひとつには、単引用符はアポストロフとして属性値に含まれる可能性があるからかな。米国では一般に二重引用符が好まれるという話も。c14n XMLでも二重引用符が正規形です。RT @aratakojima:HTMLの属性は...なんで二重引用符を使うことが一方的に多いんだろう。
まさかの神崎先生、降臨!!!こんな頭の悪い発言[謎]をしているぼくに回答をいただけるとは!ただ、
単引用符はアポストロフとして属性値に含まれる可能性があるからかな。
え、そんなことできるの!というのが個人的にはビックリなんですが。ちなみに、どなたかソース分かりません?
ほかにも「こんな流れがあるんじゃないの?」とか、上記で回答していただいた皆さんへの補足などなど、ぜひ教えていただきたいと思います。それとTwitterで回答していただいた皆様、本当にありがとうございます。
追記(2009年12月1日15時31分)
神崎先生からの追記のTweetを発見しました。
_masaka
http://twitter.com/_masaka/status/6201641791
「単引用符はアポストロフとして属性値に含まれる」とは、ASCII 39で所有のsや省略を示すフレーズ(例:W3C's logo)が属性値になる場合です(ただし推奨はU+2019)。ならば囲みは二重引用符が好都合という考えもあるのかなと。http://bit.ly/5iFl50
ありがとうございます!