URLエンコード(パーセントエンコーディング)とデコードを相互に変換します。日本語を含むURLやクエリパラメータの確認に使えます。
なぜエンコードが必要か
URLで使える文字は限られています。日本語や空白、一部の記号はそのまま使えないため、%E3%81%82 のように16進数で表現します。UTF-8では日本語1文字が3バイトのため、%XX が3つ並びます。
あ → %E3%81%82 空白 → %20(クエリ内では + の場合もあります) & → %26 / → %2F
encodeURIとencodeURIComponentの違い
クエリパラメータの値に & や = が含まれる場合、encodeURIComponent でエンコードしないとパラメータの区切りと誤解されます。値には常に後者を使うのが安全です。
| 関数 | エンコードしない文字 | 用途 |
|---|---|---|
| encodeURI | : / ? # [ ] @ & = + $ , ; | URL全体 |
| encodeURIComponent | 英数字と - _ . ! ~ * ' ( ) | クエリの値、パスの一部 |
使いどころ
- 日本語を含む検索URLを作る
- APIリクエストのパラメータを組み立てる
- エンコードされたURLの中身を読む
- アクセス解析のリファラーを解読する
よくある質問
Q 空白は %20 と + のどちらですか?
URLのパス部分では %20、クエリ文字列では歴史的に + が使われることがあります。用途に合わせて確認してください。
Q 日本語1文字が3つの%XXになるのはなぜ?
UTF-8では日本語1文字が3バイトで表されるためです。バイトごとに%XXへ変換されます。
Q エンコードしすぎるとどうなりますか?
URL全体にencodeURIComponentを使うと、: や / までエンコードされてURLとして機能しなくなります。
Q 二重エンコードとは?
% 自体が %25 に変換され、%25E3... のようになる状態です。元のURLがすでにエンコード済みか確認してください。
