URL エンコード/デコード

URL に使えない文字をパーセントエンコード、またはエンコード済みの URL を元のテキストにデコードします。日本語にも対応しています。

入力

変換の方向
エンコードの範囲

「値として」は ? や & なども含めてすべてエンコードします(クエリ値向け)。「URL 全体」は :/?#&= など URL の区切り記号は残します。「フォーム」は半角スペースを + にします(application/x-www-form-urlencoded)。

変換結果

※ 日本語などのマルチバイト文字も UTF-8 として処理します。デコード時に % の後ろが不正な場合は、その旨を表示します。

解説

URL に直接使えない文字(日本語・半角スペース・一部の記号など)を、パーセント記号と16進数の組み合わせ(パーセントエンコード/URLエンコード)に変換したり、その逆に元のテキストへ戻すツールです。URLは使える文字が限られているため、リンクやクエリパラメータに日本語や記号を含めるときにこの変換が必要になります。

仕組みは、対象の文字をいったんUTF-8のバイト列にし、各バイトを「%」+16進2桁の形で表すというものです。1バイトの文字は「%XX」1つに、日本語のように複数バイトの文字は「%XX%XX%XX」のように複数のまとまりになります。たとえば半角スペースは %20、「東京」は3バイト×2文字で %E6%9D%B1%E4%BA%AC に変換されます。デコードはこの逆で、% の並びを読み取って元の文字へ戻します。

エンコードの範囲は2種類あります。「値として(推奨)」はクエリパラメータの値など「1つの値」をエンコードする方式で、? & = / : # などの記号も含めてすべてエンコードします(内部的にブラウザの encodeURIComponent を使用)。たとえば a b&c=d は a%20b%26c%3Dd になります。

もう一方の「URL 全体」は、:/?#&= といった URL の区切り記号はそのまま残し、日本語やスペースなどだけをエンコードする方式です(内部的に encodeURI を使用)。https://example.com/あ?q=a b を URL 全体で変換すると https://example.com/%E3%81%82?q=a%20b のように、構造を保ったままエンコードされます。クエリの値だけを変換するなら「値として」、URL全体をまとめて変換して区切り記号を壊したくないなら「URL 全体」が向いています。迷ったら「値として」が安全です。

デコードは範囲指定なしで、エンコード方式に関わらず %XX の並びを元に戻します。「%」の後ろが16進2桁になっていない、または途中で切れた不正な文字列の場合は「正しくエンコードされた文字列ではありません」と案内し、変換を中止します。

日本語などのマルチバイト文字はすべてUTF-8として処理され、エンコードした結果をデコードすれば元のテキストへ正確に戻せます。処理はすべてお使いのブラウザ内で行われ、入力内容が外部へ送信されることはありません。

よくある質問

URLエンコード(パーセントエンコード)とは何ですか?

URLに直接使えない日本語・スペース・記号などを、% と16進2桁の組み合わせに置き換える変換です。対象文字をUTF-8のバイト列にし、各バイトを %XX の形で表します。たとえば半角スペースは %20 になります。

「値として」と「URL 全体」はどう使い分けますか?

クエリの値や1つのパラメータを変換するなら「値として」(? & = / などの記号もすべてエンコード)、URL全体をまとめて変換して区切り記号を残したいなら「URL 全体」を選びます。迷ったら「値として」が安全です。

「東京」はどう変換されますか?

「東」「京」はそれぞれUTF-8で3バイトのため、%E6%9D%B1%E4%BA%AC に変換されます。半角スペースは %20 です。デコードすれば元の「東京」へ戻ります。

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

「%」の後ろが16進数2桁になっていない、または途中で切れた文字列を入力した場合に出ます。エンコード済みの完全な文字列を貼り付けてください。

「+」は半角スペースに戻りますか?

標準のデコードでは %20 を半角スペースに戻し、+ はそのまま + として扱います。フォーム送信(application/x-www-form-urlencoded)の値のように「+=スペース」で戻したいときは、デコード時に「+を半角スペースとして戻す」にチェックしてください。エンコード側も「フォーム」を選ぶと空白を + にできます。

日本語も正しく変換できますか?

はい。UTF-8として処理するため、日本語を含むテキストも正しくエンコード・デコードでき、往復しても元のテキストへ正確に戻ります。

入力した内容はサーバーに送られますか?

送られません。エンコード/デコードはすべてブラウザ内で処理され、入力はどこにも送信されません。