URLデコードとは?
URLデコード(パーセントデコード)はURLエンコードの逆処理です。パーセントエンコードされたシーケンスを元の文字に変換します。パーセント記号の後に2桁の16進数(%XX)が続く箇所はそれぞれ、XXが示すバイトに置き換えられます。連続してエンコードされた複数のバイトは、元のUTF-8文字を再構築するために結合されます。
URLデコードは、API、Webスクレイピング、ログ解析、認証フローを扱う開発者にとって日常的な作業です。エンコードされたURLはコンピュータには読めますが人間には不透明で、デコードすることで実際のパス、検索クエリ、リダイレクト先、パラメータ値が即座に明らかになります。
このツールを使う理由
パーセントエンコードされたURLやクエリ文字列をすばやく解読できます。ブラウザのコンソール不要、サーバーへの送信もありません。
⚡即時デコード
エンコードされたURLやパラメータを貼り付けると、すぐに人間が読める形式で表示されます。APIリクエストやログファイルのデバッグに最適です。
🛡️エラー回復
decodeURIComponentで失敗する旧式のLatin-1パーセントエンコード文字を含む入力に対しては、自動的にレガシーのunescape()にフォールバックします。
🔒クライアントサイドのみ
すべてのデコードはブラウザ内でローカルに実行されます。トークン、パスワード、プライベートなクエリパラメータがデバイスの外に出ることはありません。
🔁完全なURL対応
完全なURLと個別のパラメータ値の両方をデコードできます。標準の%20スペースも処理しつつ、+記号はリテラルのプラス文字として保持します。
このオンライン URL デコーダーの使い方
アカウント不要、インストール不要。パーセントエンコードされた文字列を入力フィールドに貼り付けると、デコードされた結果が即座に表示されます。すべてブラウザ内で動作します——データがデバイスの外に出ることはありません。
- 1
エンコードされた URL または文字列を貼り付ける
パーセントエンコードされた文字列をコピーして入力フィールドに貼り付けてください——ブラウザのアドレスバーの URL、サーバーログのクエリパラメータ、API レスポンス、またはリダイレクト先など何でも構いません。
- 2
自動フォーマット検出
デコーダーは %XX パーセントエンコーディングと + をスペースとして扱う形式(application/x-www-form-urlencoded)の両方を自動的に処理します。エンコード形式を手動で指定する必要はありません。
- 3
デコードされた出力を確認する
人間が読める形式のテキストが即座に表示されます。入力にネストされたエンコーディング(二重エンコードされた文字列)が含まれていた場合、デコーダーは一層ずつ解決します。不正な %XX シーケンスに対してはエラーが表示されます。
- 4
コピーまたは再エンコードする
コピーをクリックしてデコードされた文字列を取得します。別の設定で再エンコードが必要ですか?ワンクリックで URL エンコーダーツールに切り替えられます。
デコードの仕組み
デコーダーは入力をスキャンして%シーケンスを検出し、2桁の16進数グループをバイト値に変換し、連続するバイトシーケンスをまとめて、最終的なUnicode文字を生成するためにUTF-8として解釈します。
例
入力:https%3A%2F%2Fexample.com%2Fsearch%3Fq%3Dhello%20world
%3A → : %2F → / %3F → ? %3D → = %20 → space
出力:https://example.com/search?q=hello world
パーセントエンコード文字リファレンス
よく見かけるパーセントエンコードシーケンスのクイックリファレンスです:
| エンコード形式 | 文字 | 見かける場面 |
|---|
| %20 | space | path segments, query values |
| %2B | + | literal plus (not a space in query) |
| %2F | / | slash inside a path component |
| %3F | ? | literal question mark in a value |
| %23 | # | literal hash in a value |
| %26 | & | literal ampersand in a value |
| %3D | = | literal equals sign in a value |
| %40 | @ | at sign in username / password |
| %3A | : | colon inside a path segment |
| %25 | % | literal percent sign |
| %2C | , | comma in path or query |
| %5B | [ | opening bracket |
| %5D | ] | closing bracket |
| %7B | { | curly brace in template literals |
| %7D | } | curly brace in template literals |
よくある使用例
APIリクエストのデバッグ
ブラウザのDevToolsネットワークログからURLをコピーしてデコードし、実際のクエリパラメータ値を確認します。自動化ツールやライブラリがパラメータをパーセントエンコードしている場合に特に便利です。
ログファイルの読み取り
WebサーバーのアクセスログやアプリケーションログはURLをエンコード形式で保存します。デコードして実際のリクエストパス、検索語句、パラメータ値を確認します。
リダイレクトの調査
OAuthコールバック、SSOリダイレクト、リンクトラッキングURLには大量にエンコードされたredirect_uriやnextパラメータが含まれることがよくあります。URLをデコードして意図された遷移先を確認します。
Webhookペイロードの解析
application/x-www-form-urlencodedとして送信されるWebhookボディ(Stripe、Twilio、GitHub)はパーセントエンコードされた文字列として届きます。デコードして実際のフィールド値を読み取ります。
検索クエリの抽出
アナリティクスURLやRefererヘッダーにはq=パラメータにパーセントエンコードされたユーザーの元の検索クエリが含まれています。デコードして実際の検索語句を表示または分析します。
URLのリバースエンジニアリング
サードパーティAPIとの統合やスクレイピングの際、遭遇するURLにはエンコードされたパスセグメントやパラメータが含まれることがよくあります。デコードしてURL構造を理解し、リクエストを再現します。
よくある落とし穴
パーセントエンコードされた文字列をデコードする際によくある間違いを紹介します:
✕+と%20の混同
application/x-www-form-urlencoded データ(HTMLフォームの送信)では+はスペースを表します。しかし生のURLパスやencodeURIComponentでエンコードされた値では、+はリテラルのプラス記号です。decodeURIComponentは+をスペースに変換しません。フォームデータにはURLSearchParamsかunquote_plusを使用してください。
✕二重エンコードされた文字列
文字列が2回エンコードされている場合、1回のデコードではパーセント記号が残ります:%2520はスペースではなく%20にデコードされます。元の値を得るには2回目のデコードが必要です。ログ、プロキシ、既にエンコードされたデータを再エンコードするミドルウェアに注意してください。
✕不正なパーセントシーケンス
単独の%や16進数以外の文字が続く%(例:%GGや% 2)は無効であり、URIErrorをスローします。常に入力を検証するか、デコードをtry/catchで囲んでください。
✕エンコード不一致(Latin-1とUTF-8)
旧システム(PHPのurlencode、クラシックASP)は文字をLatin-1バイトとしてエンコードしていました。Latin-1でエンコードされた文字列はUTF-8デコーダーで正しくデコードできない場合があります。文字化けが発生した場合は、レガシーのunescape()を試すか、元のエンコーディングを確認してください。
コード例
主要な言語・環境でURL文字列をデコードする方法:
JavaScript (browser / Node.js)
// Decode a percent-encoded component
decodeURIComponent('hello%20world%20%26%20more') // → "hello world & more"
// Decode a full URL (leaves structure characters encoded)
decodeURI('https://example.com/path?q=hello%20world') // → "https://example.com/path?q=hello world"
// Parse a query string (handles + as space automatically)
const params = new URLSearchParams('q=hello+world&lang=en')
params.get('q') // → "hello world"Python
from urllib.parse import unquote, unquote_plus, parse_qs
# Decode percent-encoded string
unquote('hello%20world%20%26%20more') # → 'hello world & more'
# Decode form-encoded string (+ → space)
unquote_plus('hello+world%21') # → 'hello world!'
# Parse full query string
parse_qs('q=hello%20world&lang=en') # → {'q': ['hello world'], 'lang': ['en']}Node.js (URL API)
const url = new URL('https://example.com/search?q=hello%20world%20%26%20more')
url.searchParams.get('q') // → "hello world & more"
url.pathname // → "/search"CLI (bash)
# Decode with Python one-liner
python3 -c "from urllib.parse import unquote; print(unquote('hello%20world'))"
# Decode with Node.js
node -e "console.log(decodeURIComponent('hello%20world%20%26'))"URL デコーダー vs. 代替手段
パーセントエンコードされた文字列をデコードできるツールは複数ありますが、明確さ、プライバシー、利便性の点でそれぞれ異なります。
このツール
ブラウザベースで即時、プライベート。%XX エンコーディング、+ をスペース、Unicode、不正なシーケンスを処理します。データはどのサーバーにも送信されません。
ブラウザのアドレスバー
ブラウザは表示のために URL をデコードしますが、常に完全ではありません——一部のエンコードされた文字がアドレスバーに残ることがあります。個別のパラメータ値を検査するのには向いていません。
DevTools / curl -v
ブラウザの DevTools と curl は、ネットワークリクエストで生の URL とデコードされた URL を表示します。デバッグに役立ちますが、ツールを切り替えて、どこを見ればよいかを知る必要があります。
よくある質問
decodeURIComponentとdecodeURIの違いは何ですか?
decodeURIComponentは予約文字(%2F → /、%3F → ?など)を含むすべてのパーセントエンコードシーケンスをデコードします。decodeURIはURLで特別な意味を持つ文字を生成しないシーケンスのみをデコードし、%2F、%3F、%23などの構造的な文字はエンコードされたまま保持します。パラメータ値にはdecodeURIComponentを使用し、完全なURLを持ちその構造を維持したい場合のみdecodeURIを使用してください。
URIError: malformed URIが表示される理由は?
decodeURIComponentのこのエラーは、入力に2つの有効な16進数が続かない%が含まれている場合、またはマルチバイトUTF-8シーケンスが不完全な場合(例:後続の%82%ACがない%E2)に発生します。デコード前に孤立したパーセント記号を取り除くかエスケープしてください。
デコードで+はスペースとして扱われますか?
いいえ — decodeURIComponentは+をスペースではなくリテラルのプラス記号として扱います。+ → スペースの変換はapplication/x-www-form-urlencodedデータ(HTMLフォームの送信)にのみ適用されます。フォームエンコードされたデータをデコードするには、URLSearchParams(ブラウザ/Node)またはurllib.parse.unquote_plus(Python)を使用してください。
URLデコードをクライアントサイドで行うのは安全ですか?
はい — URLデコードはネットワークリクエストを伴わない純粋な変換処理です。現代のすべてのブラウザはdecodeURIComponentとdecodeURIをネイティブ関数として搭載しています。このツールはデコードを完全にブラウザ内で実行し、データはどこにも送信されません。
複数回エンコードされたURLをデコードするには?
出力が安定する(これ以上%シーケンスが解決されなくなる)まで複数回デコードしてください。これは既にエンコードされたURLが別のエンコーダーを通過した際に発生します。デコードのたびにエンコードの層が1つ除去されます。
%XXは何を表しますか?
%の後の2文字は1バイト値(00–FF)を表す16進数です。ASCII文字の場合、このバイトはその文字のASCIIコードです:%41 = 65 = 'A'。非ASCII文字の場合、複数の%XXシーケンスでその文字のUTF-8バイトシーケンスを表します:ユーロ記号€は%E2%82%AC(3バイト:0xE2、0x82、0xAC)です。
ブラウザは HTML フォームを送信する際にどのエンコードを使用しますか?
method=GET の HTML フォームは application/x-www-form-urlencoded エンコードを使用してフィールドを URL に追加します。スペースは %20 ではなく + に置換され、その他の特殊文字はパーセントエンコードされます。URL Decode ツールの「+ → スペース」オプションがこの形式を処理します。method=POST で enctype=application/x-www-form-urlencoded のフォームはリクエストボディで同じ方式を使用します。
デコードのサイズ制限はありますか?
サーバー側の制限はありません——ツールは完全にブラウザ内で動作します。実際の制限はブラウザのメモリに依存します。非常に長いエンコードされた文字列やバッチ処理には、スクリプト内で decodeURIComponent を使用してください。