1. ホーム
  2. html

[解決済み] <a href...>のアンパサンドはエンコードするのか?

2022-04-23 23:10:05

質問

HTMLを自動生成するコードを書いているのですが、正しくエンコードしてほしいのです。

次のようなURLへのリンクを生成しているとします。

http://www.google.com/search?rls=en&q=stack+overflow

私は、すべての属性値はHTMLエンコードされるべきであると仮定しています。(つまり、上記のURLをアンカータグに入れる場合、アンパサンドを次のようにエンコードする必要があります。 &amp; というように。

<a href="http://www.google.com/search?rls=en&amp;q=stack+overflow">

ということでよろしいでしょうか?

解決方法は?

はい、そうです。HTMLエンティティはHTML属性の内部でパースされ、野良猫のような & は曖昧さを生みます。そのため、常に &amp; ではなく、単に & 内側 すべて HTMLの属性です。

とは言っても & と引用しています。 必要 をエンコードする必要があります。のような特殊文字がある場合 é をエンコードしなくても、HTML パーサーは満足します。

以前は、URLは非ASCII文字で特別な扱いが必要でした。 é . これらはパーセントエスケープを使ってエンコードする必要があり、この場合、次のようになります。 %C3%A9 で定義されているためです。 RFC 1738 . しかし、RFC 1738 は、次のものに取って代わられました。 RFC3986 (URI, Uniform Resource Identifiers) と RFC3987 (IRI, Internationalized Resource Identifiers)であり、その上で WhatWGは、HTML5以降、非ASCII文字が含まれるURLを見たときにブラウザがどのように振る舞うべきかを定義する作業をベースにしています。 . したがって、パーセントエンコードであるかどうかにかかわらず、URLに非ASCII文字を含めても安全になりました。