web-dev-qa-db-ja.com

XHTMLおよび&(アンパサンド)エンコーディング

私のウェブサイトはXHTML Transitionalに準拠しています1つのことを除いて:URLの&(アンパサンド)は&ではなく、そのまま書き込まれます

つまり、私のページのすべてのURLは通常、次のようになります。

<a href="http://www.foo.com/page.aspx?x=1&y=2">Foo</a>

しかし XHTMLバリデータ はこのエラーを生成します:

一般エンティティ "y"のシステム識別子を生成できません

...そしてそれはURLがこのように書かれることを望んでいます:

<a href="http://www.foo.com/page.aspx?x=1&amp;y=2">Foo</a>

問題は、IEおよびFirefoxがURLを正しく処理せず、yパラメーターを無視することです。このリンクを機能させて正しく検証するにはどうすればよいですか?

ブラウザーが厳密にエンコードされたXHTML URLで動作しない場合、XHTMLページを作成することは不可能のようです。

実際に見てみたいですか?これら2つのリンクの違いを確認します(そのままコピーして貼り付けます)。

http://stackoverflow.com/search?q=ff&sort=newest

そして

http://stackoverflow.com/search?q=ff&amp;sort=newest
35
Robert

私はこれを試しました。あなたがやろうとしたことは正しいです。 HTMLでは、リンクを記述している場合、&文字は&amp;としてエンコードする必要があります。アンパサンドを含むパラメーター値が必要な場合は、&%26としてエンコードするだけです。 。リンク<a href="Default2.aspx?param1=63&amp;param2=hel">Click me</a>を含むシンプルなHTMLページを書いたところ、正常に動作しました:default2.aspxは、意図したパラメーターを受け取り、ソースは検証に合格しました。

&&amp;としてのエンコードは、リンクではなくHTMLで必要です。ブラウザがリンクのHTMLソースで&amp;を検出すると、ブラウザはアンパサンドとして解釈し、リンクターゲットは意図したとおりになります。ブラウザーのアドレスバーにURLを貼り付けると、URLがHTMLであるとは想定されず、URLに含まれている可能性のあるHTMLエンコーディングを解釈しようとしません。これが、ブラウザーにコピー/貼り付けする必要があることを示唆するサンプルリンクが機能せず、機能することを期待しない理由です。

実際のコードをもう少し投稿すると、間違ったことを確認できる可能性がありますが、アンカータグで&amp;を使用すると、正しい方向に進んでいるように見えます。

56
pipTheGeek

それは私のせいでした:ハイパーリンクコントロールはすでに&でエンコードされているため、私のURL http://foo?x=1&amp;y=2http://foo?x=1&amp;amp;y=2にエンコードされました

通常、URL内の&ampは、あなたが述べたように、ブラウザーによって正しく処理されます。ありがとう

6
Robert

&amp;の代わりに、ページ内のURLで&を使用します。

これにより、厳密なxhtmlを検証できるようになります...

<a href="http://www.foo.com/page.aspx?x=1&amp;y=2">Foo</a>

ASP.NET Request.QueryString関数で使用される場合、クエリ文字列はXMLエンコーディングを使用せず、 RLエンコーディング を使用することに注意してください。

/mypath/mypage?b=%26stuff

したがって、「&」を%26に変換する関数を提供する必要があります

注:その場合、neetu +%26 + geetuを生成するServer.URLEncode(” neetu&geetu”)は、「&」だけでなく&を%26に変換する必要があるため、希望どおりではありません。 '%26amp;'を置き換えるには、URLEncodeの結果に適用されるreplace()呼び出しを追加する必要があります。 '%26'による。

5
VonC