URL エンコードされた文字列をデコードする方法
デコードはパーセントエンコーディングの逆の処理です。各 %XX が 1 バイトになり、バイト列が UTF-8 テキストとして読み取られます。「コンポーネント」モードは decodeURIComponent() を使うため、元の値がそのまま得られます。
計算例
複数バイトの UTF-8 シーケンスは 1 文字になります。
- 入力
- caf%C3%A9%20%26%20cr%C3%A8me
- 結果 ·
decodeURIComponent() - café & crème
%20 はスペースになりますが、+ はプラス記号のまま残ります。
- 入力
- a+b%20c
- 結果 ·
decodeURIComponent() - a+b c
最後のシーケンスは 16 進数が 1 桁足りないため、ツールはエラーを表示します。
- 入力
- %E0%A4%A
- 結果 ·
decodeURIComponent() - エンコード済みURLが無効です
足りない桁を補うと、3 バイトがデーヴァナーガリー文字 1 字にデコードされます。
- 入力
- %E0%A4%A4
- 結果 ·
decodeURIComponent() - त
ツールの処理方法
- %XX は 1 バイトを表し、連続するバイトはまとめて UTF-8 としてデコードされます。たとえば %C3%A9 は é になります。
- プラス記号はスペースとして扱われず、+ は + のままです。HTML フォームから送られたテキストの場合は、デコード前に + を %20 に置き換えてください。
- 不完全なシーケンスや不正な UTF-8 が含まれていると、入力全体がエラーとして拒否され、一部だけがデコードされることはありません。
- 「完全な URL」モード(decodeURI)は、%26、%2F、%3F などの予約文字のエスケープをエンコードされたまま残し、URL の構造を変えません。