できること
テキストをパーセントエンコード形式に変換し、また元に戻します。結果を制御する選択は 2 つです。方向(エンコード または デコード)とスコープ(コンポーネント または URI 全体)です。コンポーネントモードは encodeURIComponent を適用します。これはすべての予約文字をエスケープするもので、クエリ値に適しています。URI 全体モードは encodeURI を適用します。こちらは ; / ? : @ & = + $ , # をそのまま残すため、URL 全体が URL であり続けます。デコード時の孤立した % のような不正な入力は、誤った答えではなく明確なエラーを表示します。
使い方
- 方向を選びます:エンコード または デコード。
- スコープを選びます:単一のクエリ値には コンポーネント、URL 全体には URI 全体。
- 入力ボックスにタイプまたはペーストします。入力する間に出力ボックスが更新されます。
- 出力をコピーするか、方向・スコープ・テキストをエンコードした共有リンクをコピーします。
Swap ボタンは方向を反転し、現在の出力を入力へ運びます。何かをエンコードして Swap をタップすれば、ワンクリックでデコードし戻せます - 打ち直しは不要です。
例
| 入力 | 設定 | 出力 |
|---|---|---|
hello world |
エンコード、コンポーネント | hello%20world |
https://dev.cosmolabs.org/tools/url-encode |
エンコード、URI 全体 | 変化なし - すべての文字が URL 安全 |
https://example.com/search?q=hello world&page=2 |
エンコード、URI 全体 | https://example.com/search?q=hello%20world&page=2 |
path=/users/42 |
エンコード、コンポーネント | path%3D%2Fusers%2F42 |
hello%20world |
デコード、コンポーネント | hello world |
パーセントエンコードの仕組み
URI は ASCII です。この規則は最初期の URL 仕様から今日まで生き延びています。URL は ASCII バイトとして運ばれ、それ以外のものはすべてエスケープの中に乗らなければなりません。エスケープは常に 3 文字です。% と、そのバイトを指す 2 桁の 16 進数です。空白はバイト 0x20 なので %20 として運ばれます。é は UTF-8 では 2 バイト(0xC3 0xA9)なので %C3%A9 として運ばれます。
JavaScript には 2 つのエンコーダが同梱されており、スコープの切り替えがそれらを選び分けます:
encodeURIComponent(コンポーネント) |
encodeURI(URI 全体) |
|
|---|---|---|
| エスケープするもの | A-Z a-z 0-9 - _ . ! ~ * ' ( ) 以外のすべて |
同じだが、; / ? : @ & = + $ , # も維持する |
| 向いている相手 | クエリの 値 1 つ | URL 全体 1 つ |
a/b?c=d |
a%2Fb%3Fc%3Dd |
a/b?c=d |
予約文字とは URL 自身の句読点であり、それこそが 2 つの関数が存在する理由です。path=/users/42 のようなクエリ値はスラッシュをエスケープしなければなりません。さもないと、受け取り手はデータと構造を区別できません: path=%2Fusers%2F42。URL 全体はそれらを維持しなければなりません。さもないと https:// は https%3A%2F%2F に崩れます。経験則: 手にある部品に合う最も狭いスコープでエンコードすれば、本当に必要な構造をエスケープしてしまうことは決してありません。
デコードはその逆を実行します。各 %XX はそれが指すバイトになり、バイトたちは UTF-8 テキストとして再組み立てされます。2 桁の 16 進数が続かない % は不正であり、ツールは推測せずにそれを報告します。
知っておくと良いこと
- デコードは 1 回だけにします。 正当に
%20を含む値は空白にデコードされます。その結果をもう一度デコードすると、孤立した%がエラーに変わります。 - 共有リンクはモード・スコープ・テキストを運ぶので、開けばあなたの変換が正確に復元されます。
- プライベート: すべてのエンコードはブラウザー内でローカルに実行されます。何もどこへも送信されません。
- 関連ツール: URL Inspector、HTML Entity Encoder、
Base64Base64An encoding representing binary data as 64 safe ASCII characters, so it survives transport through text-only channels. It encodes — it does not encrypt.
Encode / Decode。