2009-05-02 4 views
20

URLパラメータ名に使用できる文字は正式な制限はありますか?HTTP URL - パラメータ名に許可される文字

私はRFC3986( "Uniform Resource Identifier(URI):Generic Syntax")を読んできましたが、決定的な結論には至りませんでした。

私は実用的な制限がある知っているが、実際に何かを行うことを禁止することになります限り、私はそれを正しくエスケープするよう

param with\funny<chars>=some_value

を:

param%20with%1cfunny%3cchars%3e=some_value

答えて

9

URI仕様のエスケープされたパラメータ名に制限はありません。ただし、使用するサーバー側ソフトウェアには制限がある場合があります。 URIを解釈するために "自家製"スクリプトを使用する場合、これは特に当てはまります。

+0

これはまさに私が尋ねてきた理由です... http://stackoverflow.com/questions/814613/how-to-read-data-from-url-using-javascript - 私の答えは、異常な状況で正しいものにするためのオーバーホール。 – Tomalak

+0

ああ、それは事態をかなり複雑にする。特に区切り文字として '&'を使うのは慣例に過ぎません。代わりに他のものを使用することもできる。 '、'、 ';'はかなり使われていました。また、多くのサーバエンジン(PHP、Rails、...)はネストされた引数をサポートしているので、これはクエリの有効なURIです:http://example.com/?a=b;c[1]=x;c[2] = y ...多くのWebアプリケーションでは、配列のようなデータを得るために、フォームデータ(オプション、チェックボックスなど)にこのクエリ表記法を実際に使用しています。 –

+0

だから私は、 "c [1] = x"がサーバー側の規約であるということを受け入れる準備ができていない限り、 "URLからパラメータを引き出すための関数が一つもない"あなたが探しているのは実際には*クライアントで "c [1]"と呼ばれています(これは実際には正しいでしょうが、サーバ側のプログラミングに慣れている人にとっては奇妙なものです)。 – Tomalak

1

URLの予約文字があります。しかし、あなたがエスケープする(urlencode)限り、あなたは大丈夫でしょう。

使用するフレームワークによっては、疑わしい値を送信しようとすると例外が発生することがあります。 ASP.NETには、スクリプトやHTMLなどの「安全でない」データを送信しようとすると、例外がスローされるコンテンツフィルタがあります。これは、URL構文で強制される制限やルールではなく、フレームワークの機能です。

4

RFC2396もお読みください。それはRFC3986よりも有益なようです。

+1

セクション3.4。 ( "クエリコンポーネント")には次のような特徴があります。 "クエリコンポーネントは、リソースによって解釈される一連の情報です。"これは、基本的には、私が思ったように、「何かが行く」ことを意味します。 – Tomalak

+0

残念ながら、HTTP特有のものではありません。しかし、ここにはスタンダードはなく、ただの大会しかないと思います。 – Tomalak

関連する問題