RFC 3986によると、次の文字は予約されており、予約された用途以外の URI で使用するには、パーセントでエンコードする必要があります。
:/?#[]@!$&'()*+,;=
さらに、特に予約されていないいくつかの文字を指定します。a-zA-Z0-9\-._~
一般に、(誤解を防ぐために) 予約文字をエンコードし、(読みやすくするために) 予約されていない文字をエンコードしないことは明らかですが、どちらのカテゴリにも該当しない文字はどのように処理する必要がありますか? たとえば、{
and}
はどちらのリストにも表示されませんが、標準の ASCII 文字です。
最新のブラウザーにガイダンスを求めると、動作が異なる場合があるようです。たとえば、URLhttps://www.google.com/search?q={
を Web ブラウザーのアドレス バーに貼り付けることを検討してください。
- Chrome 34.0.1847.116 m は変更しません。
- Firefox 28.0 では変更されていません。
- Internet Explorer 9.0 では変更されません。
- Safari 5.1.7 では次のように変更されます
https://www.google.com/search?q=%7B
ただし、貼り付けるhttps://www.google.com/#q={
と (「検索」を削除して を に変更し?
、#
クエリ文字列ではなくフラグメント/ハッシュの文字部分を作成)、次のことがわかります。
- Chrome 34.0.1847.116 m に変更し
https://www.google.com/#q=%7B
ます(JavaScript経由) - Firefox 28.0 では変更されていません。
- Internet Explorer 9.0 では変更されません。
- Safari 5.1.7 では
https://www.google.com/#q=%7B
(JavaScript を実行する前に) に変更します。
さらに、JavaScript を使用して要求を非同期に実行する場合 (つまり、この MDN の例を の URL を使用するように変更して使用する場合?q={
)、URL は自動的にパーセント エンコードされません。(これは、XMLHttpRequest API が URL が事前にエンコード/エスケープされていることを想定しているためだと思います。)
私は (奇妙な顧客の要求に関連する理由で) URL のファイル名部分で (1) 物事を壊すことなく、理想的には (2) 最新のネットワーク パネルで見苦しいパーセント エンコードされたエントリを作成することなく、{
andを使用したいと考えています。}
ブラウザーの Web インスペクター/デバッガー。