大原です。

wakou / fsinet.or.jp (Wakou Aoyama) さんの、
"Thu, 25 May 2000 12:46:38 +0900" にだした、
「[ruby-list:22905] Re: CGI::escape」というメールにて…… :

> > 余談ですが、HTMLのタグのエレメントでも「&"<>」を含む場合は
> > CGI::escapeHTML()する必要があるのですね。当然と言われれば当然なので
> > すが、先ほどRFC1866の以下の部分を読むまで、気づきませんでした。
> 
> これは、RFC 1866 が勘違いしていると思われます。A エレメントの HREF 属
> 性のデータ型は、実体参照などの行われない CDATA 型なので、& の解釈は行
> われず、逆に、展開されないという事は、実体参照で記述してはならないはず
> ですから。

HTML 4.01 の「6.2 SGML basic types」を超訳すると、CDATA は、
  - 属性値では、実体参照が展開される。
  - STYLE タグや SCRIPT タグの要素では、実体参照の展開は行なわれない。
ということのようです。

HTML 2.0 はわかりませんが、HTML 3.2 には同様の説明があります。

> HTML 2.0, HTML 3.2 でも同じく CDATA となっています。また、少なくとも、
> 手元の Lynx, Netscape, mozilla, w3m などでは & のままで通りますし。

これは、多分、各ブラウザが「良きに計らって」くれているだけだと思います。

というか、たまたま、対応する実体参照が存在せず、解釈できなかったので、
「&」のままほっといてるだけなんだと思います。

なので、URI に「&」を含む場合には、
  <A href="http://host/?x=1&#38;y=2">
とか
  <A href="http://host/?x=1&amp;y=2">
のように文字実体参照で記述しなくてはいけません。
と、HTML 4.01 には明記されています。

# 間違ってたらすいません、御指摘ください……。

----
OHARA Shigeki (大原重樹) <os / iij.ad.jp>