web-dev-qa-db-ja.com

有効なURLセパレータ

いくつかの値を持つ長いURLがあります。

例1:

http://www.domain.com/list?seach_type[]=0&search_period[]=1&search_min=3000&search_max=21000&search_area=6855%3B7470%3B7700%3B7730%3B7741%3B7742%3B7752%3B7755%3B7760%3B7770%3B7800%3B7840%3B7850%3B7860%3B7870%3B7884%3B7900%3B7950%3B7960%3B7970%3B7980%3B7990%3B8620%3B8643%3B8800%3B8830%3B8831%3B8832%3B8840%3B8850%3B8860%3B8881%3B9620%3B9631%3B9632

私の変数検索領域には4桁の数字(例4000、5000)しか含まれていませんが、多くの数字を含めることができます。現在、;を区切り記号として使用して、これらをURLで区切ります。例1に見られるように、; %3Bに変換されます。これは、これは使用するのに悪い記号であると私に信じさせます。

最高のURLセパレーターは何ですか?

18
Kristian

さて、 RFC1738 によると、有効なURLには文字のみを含めることができます a-z、プラス記号(+)、ピリオドとハイフン(-)。

一般的に私はあなたの検索領域を区切るためにプラスで行きます。したがって、URLは http://www.domain.com/list?seach_type=0&search_period=1&search_min=3000&search_max=21000&search_area=6855+7470+7700+ ...になります。

-編集-

GinoAが指摘したように、私はその文書を読み間違えました。したがって、「$-_.+!*'(),」も有効な文字です。私はまだ+記号で行きます。

6
Dennis G

Moontear、あなたは リンクされたドキュメント を読み間違えたと思います。この制限は、URLの「スキーム」部分にのみ適用されます。 WWW URLの場合、それは「http」です。

ドキュメントの次のセクションでは、次のように述べています。

したがって、英数字、特殊文字「$ -_。+!* '()」、および予約目的で使用される予約文字のみを、URL内でエンコードせずに使用できます。

個人的にはコンマ(、)を使います。ただし、プラス(+)とダッシュ(-)はどちらも妥当なオプションです。

ところで、そのドキュメントには、セミコロン(;)が一部のスキームで予約されていることも記載されています。

36
GinoA

分離する数値しかない場合は、セパレータの選択肢が豊富です。たとえば、任意の文字を選択できます。

おそらくスペースは良い選択かもしれません。 URLで+文字に変換されるため、文字よりも読みやすくなります。

例:search_area=4000+5000+6000

3

content-typeがapplication/x-www-form-urlencoded(HTMLフォームの標準)の場合、「+」はスペース「」として解釈されます。これは、サーバーソフトウェアによって処理される場合があります。

私は「!」が好きです。 URLエンコードされません(少なくともChromeでは)。通常の場合、実空間文字として使用するために「+」が予約されています。

1
rich remer

私はパーティーに非常に遅れていますが、有効なクエリ文字列は変数を繰り返すことができるので、代わりに...

http://x.y.z/list?type=0&period=1&min=3000&max=21000&area=6855+7470+7700

...あなたも使うことができます...

http://x.y.z/list?type=0&period=1&min=3000&max=21000&area=6855&area=7470&area=7700
0
dacracot