3

私のasp.netmvcページで、次のようにレンダリングするリンクを作成します。

http://localhost:3035/Formula/OverView?colorId=349405&paintCode=744&name=BRILLANT%20SILVER&formulaId=570230

W3Cバリデーターによると、これは正しくなく、最初のアンパサンドの後にエラーが発生します。&がエンコードされておらず、エンティティ&pが認識されていないなどの不満があります。

&はキーと値のペアの区切り文字であるため、エンコードしないでください。

気になる人のために:私が知っているオプションのパラメータを渡す適切な方法がないため、これらのパーを「/」で区切られた値としてではなく、クエリ文字列として送信します。

すべてのビットをまとめるには:

  • アンカー(<a>)タグのhref属性には、エンコードされた値が必要です
  • &は&amp;にエンコードします
  • パラメータの値の一部である場合に「&」をエンコードするには、%26を使用します

アンパサンドをエンコードしてパラメータの値の一部にしませんか?2番目の変数を最初の変数から分離するために必要です

実際、href値をエンコードすることで、エラーを取り除くことができます。ただし、今疑問に思っているのは、たとえば、私のcolorIdが "123&456"の場合、アンパサンドが値の一部である場合はどうするかです。セパレータはエンコードする必要があるため、エンコードされたアンパサンドをどうするか。いわば2回エンコードする必要がありますか?

したがって、URLを取得するには:

www.mySite.com/search?query=123&amp;456&page=1

私のhref値はどうあるべきですか?

また、私はこれを気にする世界で最初の人だと思います。wwwをチェックして、W3Cバリデーターでクエリ文字列が検証されるページを数えます。

4

3 に答える 3

4

通常、属性の一部であるエンティティはエンコードする必要があります。したがって、&amp;が必要です。&の代わりに

ほとんどのブラウザは何を受け入れるかについて非常に、非常に非常に寛大であるため、検証されなくても機能します。

さらに、XHTMLを出力する場合は、属性内だけでなく、あらゆる場所ですべてのエンティティをエンコードする必要があります。

于 2008-11-19T15:27:38.093 に答える
3

すべてのHTML属性は文字エンティティを使用する必要があります。&を&amp;に変更する必要はありません。スクリプトブロック内。

<a href="http://localhost:3035/Formula/OverView?colorId=349405&amp;paintCode=744&amp;name=BRILLANT%20SILVER&amp;formulaId=570230">Whatever</a>

&を空白以外のもののすぐ隣に表示したいHTMLドキュメントの任意の場所で、文字エンティティ&amp;を使用する必要があります。属性の一部である場合、&amp; &のように動作します。ドキュメントがXHTMLの場合、&のすぐ隣に何かがなくても、どこでも文字エンティティを使用する必要があります。他の文字エンティティを属性の一部として使用して、実際の文字であるかのように扱うこともできます。

パラメータの区切り文字として以外の方法でURLの一部としてアンパサンドを使用する場合は、%26を使用する必要があります。

例として...

<a href="http://localhost/Hello?name=Bob&amp;text=you%20%26%20me%20&quot;forever&quot;">Hello</a>

ユーザーをhttp:// localhost / Helloに送信し、name=Bobおよびtext=you&meを「永遠に」送信します。

于 2008-11-19T15:28:04.470 に答える
1

これは、一部の人にとっては少し紛らわしい概念です。のよう&amp;にHTMLページを挿入する<a href="abc?def=5&amp;ghi=10">と、URLは実際には abc?def=5&ghi=10。になります。HTMLパーサーは、エンティティをアンパサンドに変換します。

文字列内の引用符をエスケープする必要がある方法とまったく同じように考えてください。

// though you define your string like this:
myString = "this is \"something\" you know?"

// the string is ACTUALLY: this is "something" you know?

// when you look at the HTML, you see:
<a href="foo?bar=1&amp;baz=2">

// but the url is ACTUALLY: foo?bar=1&bar=2
于 2008-11-20T01:36:24.773 に答える