less

きづかないくらいイージーなクオリティー

Archive

2月
15th
permalink

URLの&を実体参照してない時の注意

HTMLの文字参照は<<のように「&」で始めて「;」で終わらせるものだと思っていたら、どのブラウザも最後の「;」がなくても文字参照として扱うらしい。

問題になるのはURLのリンクに「&」がある場合。

<a href="foo?foo=1&bar=2">

本来&amp;bar=とすべき所をサボると、&以降=までの文字が文字参照に該当する場合に変換される。例えば

<a href="http://example.com/foo?foo=1&copy=2">

&copy;として扱われ

http://example.com/foo?foo=1©=2

に飛ぶ(Chromeを除く。Chromeは文字実体参照では問題ないが、&#169のような数値文字参照で同様の問題が起こる(Mac版9.0.597.102で確認))。

&ltのような結果がURLエンコード出来る文字については、Firefoxはそのまま「<」に、SafariやOperaでは「%3C」(URLエンコードされた「<」)になる模様。

HTML 5の仕様

If the markup contains (not in an attribute) the string I'm &notit; I tell you, the character reference is parsed as “not”, as in, I'm ¬it; I tell you (and this is a parse error). But if the markup was I'm &notin; I tell you, the character reference would be parsed as “notin;”, resulting in I'm ∉ I tell you (and no parse error).

まあちゃんとHTMLに沿って書けばいいと思います><