URLエンコード・デコード

パラメーター値など、URLの構成要素として扱うテキストをエンコード・デコードします。ブラウザー標準のencodeURIComponentとdecodeURIComponentを使い、入力全体を1つのデータとして変換します。完全なURLの構造を保つ処理ではありません。

ブラウザ内でローカルに実行

パラメーターの値を変換する

テキストを直接貼り付けて使います。変換はブラウザー内で行い、入力したアドレスにはアクセスしません。ファイルの読み込みや一括処理には対応していません。

  1. 元のテキストまたはパーセント表記の文字列を入力し、「エンコード」か「デコード」を選びます。
  2. 出力を確認し、「結果をコピー」で取得します。エラーの場合は前の結果が消え、コピーできなくなります。
  3. 逆方向に変換するには、結果を自分で入力欄に貼り付けます。「クリア」で入力と出力を消去できます。

変換される文字とデコードの範囲

UTF-8表記にする文字、そのまま残す文字

エンコードではA-Z a-z 0-9と - _ . ! ~ * ' ( ) を変更しません。それ以外の有効なUnicode文字はUTF-8バイトのパーセント表記になります。たとえば、你好 😀 は %E4%BD%A0%E5%A5%BD%20%F0%9F%98%80 になります。RFC 3986への厳密な適合を目的とした ! ' ( ) * の追加エスケープは行いません。

URLの区切り文字もデータとして変換

a=1&b=two words をエンコードすると a%3D1%26b%3Dtwo%20words になります。完全なURLを貼り付けた場合も : / ? & = は変換されます。アドレス全体を値として扱う用途には使えますが、URLの構造は保持しません。

デコードした区切り文字をURLに戻すと、解釈が変わることがあります。必要に応じてパラメーターのデータとして扱ってください。URLの妥当性検証や暗号化は行いません。結果はプレーンテキストで表示し、HTMLとして実行しません。

既存の%表記も再エンコードする

%20 をエンコードすると %2520 になります。逆に %2520 を1回デコードすると、空白ではなく文字列 %20 が得られます。処理は1段階だけで、繰り返しデコードしたり、入力を結果に自動置換したりしません。

URL構成要素の変換についての質問

デコードしても+が残るのはなぜですか?

application/x-www-form-urlencodedの処理ではないためです。エンコードでは空白が%20、+が%2Bになります。デコードでは文字そのものの+を残すので、a+b%20c は a+b c になります。

URIErrorになる入力は何ですか?

%、%GG、%E4%A のような不正なエスケープや、%FF、%C0%AF のような無効なUTF-8はデコードできず、置換文字ではなくエラーになります。対になっていないUTF-16サロゲートのエンコードも失敗します。デコード時はエスケープ以外の文字列をそのまま残し、個々の文字の妥当性までは検証しません。

空白や改行は元のままですか?

先頭・末尾を含め、空白文字を削除する処理はありません。ただし、ブラウザーのtextareaは入力された改行をLFにそろえ、エンコード結果は%0Aになります。元のCRLFやCRのバイト列は保持されません。Unicode正規化は追加せず、空の入力は空の結果になります。

最近使ったツール: