web-dev-qa-db-ja.com

予約文字をエンコードする各URLの意味と使用例

パーセントエンコーディング からの引用

特定のコンテキストで予約済みセットの文字(「予約済み文字」)が特別な意味(「予約済みの目的」)を持ち、URIスキームがその文字を他の目的に使用する必要があると言っている場合、その文字パーセントエンコードする必要があります。予約文字のパーセントエンコーディングには、文字をASCIIの対応するバイト値に変換し、その値を16進数のペアとして表すことが含まれます

URIのコンテキストでこの文字はそれぞれ何を意味しますか?

enter image description here

検索エンジンでは、リストとその意味/ユースケースが見つかりませんでした。

4
Ivanov

URIのコンテキストでこの文字はそれぞれ何を意味しますか?

URIはいくつかの異なる「コンテキスト」またはpartsで構成されていることに注意してください。例えば。スキーム、ホスト、URLパス、クエリ文字列、フラグメント識別子。予約文字に特別な意味があるかどうかは、その文字がURLのどこで使用されているかによって異なります。これらの「予約文字」は、URIの一部を区切るためによく使用されます。これらの文字をエンコードする必要があるのは、「特別な意味」(存在する場合)と競合する場合のみです。

一部の文字は、単に他の文字の代替として定義されているため、処理される場所で(サーバー上で)特別な意味を持たない場合があります。

私はボールの転がしを始めますが、いくつかは確信がありません:

  • !(感嘆符)-わかりません。 JavaScriptはこの文字をエンコードしません。フラグメント識別子でAJAX URLを表すためにhistoricallyが使用されています。例えば。 #!(ハッシュバン)-ただし、これは「標準」ではなくGoogleでした。

  • #(ハッシュ/ポンド)-フラグメント識別子を区切ります。 (URLの最後の部分、クライアント側のみ、サーバーには渡されません。)

  • $(ドル)-わかりません。私が知っているURLパスまたはクエリ文字列には特別な意味はありません。ただし、JavaScriptのencodeURIComponent()はこの文字をエンコードしますが(encodeURI()はエンコードしません)、クエリ文字列で特別な意味を持つ可能性があります。

  • &(アンパサンド)-クエリ文字列パラメーターを区切るために使用されます。

  • '(アポストロフィ/単一引用符)-わかりません。 URLパスまたはクエリ文字列に特別な意味はありません。 JavaScriptはこの文字をエンコードしません。

  • (および)(括弧/括弧)-わかりません。 URLパスまたはクエリ文字列に特別な意味はありません。 JavaScriptはこれらの文字をエンコードしません。

  • *(アスタリスク)-わかりません。 URLパスまたはクエリ文字列に特別な意味はありません。 JavaScriptはこの文字をエンコードしません。

  • +(プラス)-クエリ文字列でのみspace%20の代替)をエンコードするために使用できます。 URLパスで使用される場合のリテラル+

  • ,(コンマ)-;の代替。

  • /(スラッシュ)-URLパスのパスセグメントを区切ります。

  • :(コロン)-スキームHostおよびHostポートから

  • ;(セミコロン)-クエリ文字列のURLパラメーターを区切ります。

  • =(等しい)-クエリ文字列の名前/値のペアを区切ります。

  • ?(疑問符)-クエリ文字列の開始を区切ります。

  • @(At)-URLの権限部分でuserinfoを区切ります。

  • [および](角括弧)-必ず注意してください。これらはPHPによって使用され、クエリ文字列で配列のようなパラメータ名を許可します-これは「公式」な使用ではないと思いますが。

PHP(urlencode()rawurlencode())とJavaScript(encodeURIComponent()encodeURI())の違いに注意してください。組み込み関数を使用してURLの一部をエンコードする場合... PHPはすべての「予約済み」をエンコードしますただし、ブラウザのJavaScriptははるかに選択的です。

詳細なリファレンス:
RFC 3986-Uniform Resource Identifier(URI):Generic Syntax

2
MrWhite