開発ツール

URLエンコード・デコードツール【無料・登録不要】日本語URLの変換・クエリ分解に対応

URLエンコード・デコードツール【無料・登録不要】日本語URLの変換・クエリ分解に対応
engblog-poster

日本語や記号を URL で使える形(%E6%97%A5 のような「%XX」の形)に変換したり、元の文字に戻したりできる無料ツールです。JavaScript の encodeURIComponent 形式と encodeURI 形式を切り替えられるほか、フォームの送信で使われる「空白を + にする」形式にも対応しています。

URL を貼り付けると、クエリ文字列(? より後ろの部分)をキーと値の表に分解して表示します。デコードできない文字列は、何文字目のどこが間違っているのかを日本語で表示します。入力した文字はお使いのブラウザの中だけで処理され、サーバーには一切送信されません。

オプション

クエリ文字列の分解

入力欄に「?」付きの URL や「a=1&b=2」の形の文字列を入れると、キーと値の表を表示します(+ は空白として読みます)。

入力した文字はお使いのブラウザ内だけで処理されます。サーバーへの送信や保存は一切行いません。

使い方

文字を URL エンコードする

  1. 「変換」で「エンコード(文字 → %XX)」を選びます。
  2. 「形式」を選びます。クエリの値など URL の一部に入れる文字なら「encodeURIComponent」、日本語を含む URL 全体なら「encodeURI」を選びます。
  3. 入力欄に文字を入力します。入力と同時に、出力欄に結果が表示されます。
  4. 「出力をコピー」を押すと、結果をクリップボードにコピーできます。

たとえば「日本」は「%E6%97%A5%E6%9C%AC」に変換されます。文字は UTF-8 のバイト列として変換されるので、日本語 1 文字はふつう「%XX」3 つ分になります。

URL デコードして元の文字に戻す

  1. 「変換」で「デコード(%XX → 文字)」を選びます。
  2. 入力欄に、%XX を含む文字列や URL を貼り付けます。
  3. 出力欄に、元の文字に戻した結果が表示されます。

「出力を入力に移して逆変換」を押すと、出力をそのまま入力欄に移し、エンコードとデコードを切り替えます。正しく元に戻るかを確かめたいときに便利です。

フォーム形式(空白を + にする)で変換する

HTML のフォームから送信されたデータや、検索サイトの URL などでは、空白が「%20」ではなく「+」になっていることがあります。この形式(application/x-www-form-urlencoded)を扱うときは、「形式」を encodeURIComponent にしたうえで、「フォーム形式」にチェックを入れます。

  • エンコード:空白を「+」にし、英数字と * - . _ 以外をすべて %XX にします。JavaScript の URLSearchParams と同じ結果になります。
  • デコード:「+」を空白に置き換えてから、%XX を元の文字に戻します。文字の「+」そのものは「%2B」と書かれています。

クエリ文字列を表に分解する

入力欄に「?」を含む URL や、「a=1&b=2」の形の文字列を入れると、ツールの下の「クエリ文字列の分解」に、キーと値の表が表示されます。値はデコードした形で表示し、元の文字列と違う場合は、その下に元の文字列も小さく表示します。

分解のルールは、ブラウザの URLSearchParams と同じです。「#」より後ろ(ページ内の位置を表す部分)は対象外で、「+」は空白として読みます。同じキーが何回も出てくる場合は、出てきた順にすべて表示します。

デコードできないときは

「%」の後ろが 16 進数 2 桁になっていない、UTF-8 の文字が途中で切れている、といった文字列はデコードできません。その場合は、エラーの行と文字の位置、原因が表示されます。「入力欄のエラーの場所を選択」を押すと、入力欄の該当箇所が選択されます。

古い Web サイトなどでは、日本語を Shift_JIS でエンコードしていることがあります。UTF-8 として読めず、Shift_JIS としてなら読める場合は、参考として Shift_JIS で読んだ結果も表示します。

複数の行をまとめて変換する

「1 行ずつ変換する」にチェックを入れると、行ごとに別々に変換し、改行はそのまま残します。チェックを入れない場合は、改行も「%0A」に変換します。

URLエンコードとは?

URL エンコード(パーセントエンコーディング)は、URL にそのまま書けない文字を「%」と 16 進数 2 桁の組み合わせで表す方法です。ルールは RFC 3986 という URL の仕様で決められています。

URL に書ける文字は、半角の英数字と一部の記号に限られています。また、「/」「?」「&」「=」「#」などの記号は、URL の区切りとして特別な意味を持っています。そのため、日本語や空白、区切りと同じ記号を値として URL に入れたいときは、文字を UTF-8 のバイト列にして、1 バイトずつ「%XX」の形に置き換えます。

元の文字UTF-8 のバイト列(16 進数)URL エンコード後
A41A(英数字はそのまま)
空白20%20(フォーム形式では +)
&26%26
あE3 81 82%E3%81%82
日本E6 97 A5 E6 9C AC%E6%97%A5%E6%9C%AC

文字コードと UTF-8 のバイト数については、「UTF-8とは?仕組み・バイト数・BOMの有無をわかりやすく解説」で詳しく解説しています。

コマンドで URL エンコードする

Windows の PowerShell では、次のコマンドで encodeURIComponent と同じように変換できます。

[uri]::EscapeDataString("日本語 テスト")

実行すると「%E6%97%A5%E6%9C%AC%E8%AA%9E%20%E3%83%86%E3%82%B9%E3%83%88」と表示されます。元に戻すときは、[uri]::UnescapeDataString("...") を使います。

Python では、標準ライブラリの urllib.parse を使います。次のコマンドも、上と同じ結果になります。

py -c "from urllib.parse import quote; print(quote('日本語 テスト', safe=''))"

空白を「+」にするフォーム形式にしたいときは、quote の代わりに quote_plus を使います(結果は「%E6%97%A5%E6%9C%AC%E8%AA%9E+%E3%83%86%E3%82%B9%E3%83%88」)。なお、Python の quote は「~」を変換しないなど、記号の扱いが JavaScript と少し違います。

encodeURI と encodeURIComponent の違い

JavaScript には、URL エンコードをする関数が 2 つあります。違いは、URL の区切りに使う記号を変換するかどうかです。

元の文字encodeURIencodeURIComponentフォーム形式
//(そのまま)%2F%2F
??(そのまま)%3F%3F
&&(そのまま)%26%26
==(そのまま)%3D%3D
##(そのまま)%23%23
++(そのまま)%2B%2B
空白%20%20+
! ‘ ( ) ~そのままそのまま%21 %27 %28 %29 %7E
%%25%25%25
あ%E3%81%82%E3%81%82%E3%81%82
  • encodeURI:URL 全体を渡して使います。「https://」や「/」「?」「&」などの区切りを残したまま、日本語や空白だけを変換します。
  • encodeURIComponent:クエリの値やパスの一部など、URL の「部品」を渡して使います。区切りの記号も変換するので、値の中に「&」や「=」があっても URL が壊れません。

よくある間違いは、クエリの値に encodeURI を使ってしまうことです。たとえば検索語「A&B」を encodeURI で変換すると「A&B」のままなので、?q=A&B は「q が A、B という別のパラメーター」と読まれてしまいます。encodeURIComponent なら ?q=A%26B になり、正しく「q が A&B」と読まれます。

デコードでも同じ違いがあります。decodeURI は、%2F(/)や %26(&)のような区切りを表す %XX を元に戻さずに残します。すべて元に戻したいときは decodeURIComponent を使います。

よくある質問

%25 がたくさん出てきます。なぜですか?

すでにエンコードされた文字列を、もう一度エンコードした可能性があります(二重エンコード)。「%」は「%25」に変換されるため、「%E6」は「%25E6」になります。このツールでは、エンコードする文字列に %XX が含まれていると注意を表示します。元に戻したいときは、「変換」を「デコード」にしてください。

「+」が空白に戻りません

decodeURIComponent は「+」を空白として扱いません。フォームから送信された値など、空白が「+」になっている文字列をデコードするときは、「「+」を空白として扱う(フォーム形式)」にチェックを入れてください。

日本語のドメイン名も変換できますか?

このツールでは変換できません。日本語のドメイン名は、URL エンコードではなく Punycode(ピュニコード)という別の方法で「xn--」から始まる形に変換されます(例:「例.jp」は「xn--fsq.jp」)。encodeURI 形式で変換すると、ドメイン名の部分も %XX になってしまうので注意してください。

Shift_JIS で URL エンコードできますか?

エンコードは UTF-8 だけに対応しています。現在の Web では UTF-8 が標準です。デコードできないときに、Shift_JIS としてなら読める場合は、参考として読んだ結果を表示します。

入力したデータは保存されませんか?

保存されません。変換はすべてお使いのブラウザの中で行われ、サーバーへの送信も保存も行いません。ページを閉じると入力内容は消えます。ただし、URL にはパスワードやアクセス用のトークンが含まれていることがあります。どのツールを使う場合でも、そうした情報を含む URL の扱いには注意してください。

関連する記事・ツール

ABOUT ME
hr
hr
エンジニアとして働いている hr です。仕事や資格勉強で「こんなツールがあれば」と感じたものを、無料Webツールと解説記事にして発信しています。
記事URLをコピーしました