ブログ
日本語

URLエンコード・デコード — パーセントエンコーディング変換

日本語や絵文字に対応したURLのパーセントエンコード・デコード

ブラウザー内で処理・アップロード不要

URLエンコードとは

URLにそのまま書けるのは、英字、数字、いくつかの記号だけです。日本語、空白、絵文字などそれ以外の文字はUTF-8のバイトに変換され、各バイトが % と2桁の16進数で書かれます。これがパーセントエンコーディングです。このツールは入力に合わせて、エンコードまたはデコードの結果を表示します。

使い方

  1. エンコードかデコードを選びます。
  2. 範囲を選びます。クエリの値1つならencodeURIComponent、URL全体ならencodeURIです。
  3. テキストやURLを入力欄に貼り付けると、すぐに結果が表示されます。
  4. フォームデータをデコードするときは、+を空白として扱うオプションにチェックを入れます。
  5. 結果をコピーするか、「出力を入力に使う」を押して往復変換を確認します。

仕組み

  • ブラウザー標準の encodeURIComponent、encodeURI、decodeURIComponent、decodeURI が、RFC 3986のルールに沿って変換します。
  • テキストはまずUTF-8のバイトになります。日本語や中国語の文字は3バイトなので %XX が3つ、絵文字は4バイトなので4つになります。
  • エスケープされない文字は A-Z a-z 0-9 - _ . ! ~ * ' ( ) です。encodeURIはさらに ; , / ? : @ & = + $ # もそのまま残します。
  • 対になっていないサロゲートはエンコードできず、エラーとして報告します。
  • デコードに失敗したときに黙って修復することはなく、エラーメッセージを表示します。

例

入力 モード 結果
a b&c=d 単一の値 a%20b%26c%3Dd
日本語 単一の値 %E6%97%A5%E6%9C%AC%E8%AA%9E
👍 単一の値 %F0%9F%91%8D
https://example.com/検索?q=a b URL全体 https://example.com/%E6%A4%9C%E7%B4%A2?q=a%20b

よくある質問

encodeURIComponentとencodeURIの違いは何ですか?

encodeURIComponentはクエリの値のような1つの部分に使うため、区切り文字の / ? & = や # もエスケープします。encodeURIはURL全体に使い、これらの区切り文字はそのまま残します。

デコードでエラーになるのはなぜですか?

%の後には2桁の16進数が必要で、得られたバイトが有効なUTF-8になっている必要があります。文字列が途中で切れていないか、エスケープされていない%そのものが含まれていないかを確認してください。

空白は%20と+のどちらですか?

URLのパスでは%20です。+が空白を意味するのはHTMLフォームのエンコード(application/x-www-form-urlencoded)だけです。そのようなデータをデコードするときは、+を空白として扱うオプションをオンにしてください。

URLはサーバーに送信されますか?

いいえ。処理はすべてブラウザー内で行います。

ほしいツールはありますか?