パーセントエンコーディング からの引用
特定のコンテキストで予約済みセットの文字(「予約済み文字」)が特別な意味(「予約済みの目的」)を持ち、URIスキームがその文字を他の目的に使用する必要があると言っている場合、その文字パーセントエンコードする必要があります。予約文字のパーセントエンコーディングには、文字をASCIIの対応するバイト値に変換し、その値を16進数のペアとして表すことが含まれます
URIのコンテキストでこの文字はそれぞれ何を意味しますか?
検索エンジンでは、リストとその意味/ユースケースが見つかりませんでした。
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