URLエンコード

テキストをパーセントエンコードして、URLの中で安全に使えるようにします。すべてブラウザ内で動作します。

すべてブラウザ内で動作します。アップロード、記録、保存は一切行いません。

URLには文法があり、その一部である文字("?"、"&"、"/"、"#"、スペース)は、構造ではなく値の一部として使うときにエスケープする必要があります。このエスケープがパーセントエンコードです。

仕組み

RFC 3986の非予約文字(英字、数字、"-"、"."、"_"、"~")以外の文字はすべて、UTF-8の各バイトを%記号と16進値に置き換えます。スペースは%20になり、アクセント付きの文字はUTF-8で2バイトなので2つのエスケープに、ひらがなや漢字は3バイトなので3つのエスケープになります。

フォームデータ方式があるのは、HTMLフォームの送信がこの規則より古いためです。そこではスペースは"+"になり、"~"もエスケープされます。application/x-www-form-urlencodedの本文を組み立てるときはこちらを、それ以外はすべてコンポーネント方式を選んでください。

例

ケース 入力 結果
クエリ文字列に入れる検索フレーズ coffee & cake coffee%20%26%20cake
同じフレーズをフォームデータとして coffee & cake coffee+%26+cake

よくある質問

URL全体をこれでエンコードすべきですか?

いいえ。URL全体をエンコードすると"://"や区切り文字までエスケープされ、どのクライアントもたどれない文字列になります。値を個別にエンコードしてから、それらでURLを組み立ててください。

ここでは"!"がエンコードされるのに、ブラウザのコンソールではそのままなのはなぜですか?

JavaScriptのencodeURIComponentは、RFC 3986で予約されているにもかかわらず、"!"、"'"、"("、")"、"*"を意図的にエンコードしません。これらをエンコードしても常に受け入れられ、より厳格なパーサーで思わぬ問題が起きるのを防げるので、このツールはエンコードします。

フラグメントの"#"はどうなりますか?

値の中の"#"そのものは%23としてエンコードする必要があります。そうしないと、それ以降がすべてフラグメントとして読まれ、サーバーには届きません。

知っておきたいこと

  • すべてブラウザ内で処理されます。貼り付けた内容はアップロードも記録も保存もされません。

出典

開発者向けのすべてのツール