ASP.NET MVCでデバッグするとき、以下の違いがわかりません。
http://mysite.com?q=hi,bye
そして
http://mysite.com?q=hi%2Cbye
クエリ文字列パラメータ "q"の値は常に "hi、bye"です。
では、なぜカンマがエンコードされているのでしょうか?
私はこのようなことをしたい https://stackoverflow.com/a/752109/173957 。
私はこのフォームを持っています:
<form method="GET" action="/Search">
<input type="hidden" name="q" value="hi,bye"/>
<input type="submit" value="ok"/>
</form>
この値がエンコードされないようにするにはどうすればよいですか?
URI仕様 RFC 3986 は、URIパスコンポーネントにエンコードされていない予約文字が含まれておらず、コンマが予約文字の1つであることを指定します。カンマなどのsub-delimsの場合、エンコードしないままにすると、文字がURIスキームでセパレータ構文として扱われる危険性があります。パーセントエンコーディングは、文字がデータとして渡されることを保証します。
不要な文字のリストを見つけましたURLエンコード: http://web.archive.org/web/20131212154213/http ://urldecoderonline.com/url-allowed-characters.htm
更新
元のリンクが壊れたため、2013年12月のページからarchive.orgを使用して次のテキストを取得しました
許可されたURL文字のリスト
予約なし-エンコードできますが、必須ではありません
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 - _ . ~
予約済み-ときどきエンコードする必要があります
! * ' ( ) ; : @ & = + $ , / ? % # [ ]
これは実際にはブラウザに依存しています。ブラウザはHTMLフォームを受け取り、フォームの入力に基づいてURLを構築する方法を決定します。
本当に古い(またはプログラムが不十分な)ブラウザーを使用している場合、コンマをエンコードしない可能性があります。 RFC標準に準拠している場合は、実際にエンコードする必要があります。
すべてのブラウザーでコンマがエンコードされないようにするには、JavaScriptを使用して、自分でURLを作成する必要があります。
<script lang="JavaScript">
document.location.href = "/Search?q=hi,bye";
</script>
いずれにしても、クエリ文字列パラメーターをデコードする必要があるため、問題はありません。結果は同じになります。