URLエンコード・デコードについて
URLに使えるのは、限られたASCII文字だけです。スペース、アクセント付きの文字、日本語、絵文字、そして&、=、?、#のようにURLで特別な意味を持つ文字は、パーセントエンコードしたバイトとして書く必要があります。たとえばスペースは%20に、"é"は%C3%A9になります。このツールは、テキストをこの形式に変換し、元に戻します。
URL標準で定められたUTF-8のエンコードを使い、JavaScriptのencodeURIComponent関数やencodeURI関数と同じ規則に従います。組み込みのURLインスペクターでは、完全なアドレスをプロトコル、ホスト、パス、フラグメント、デコード済みのクエリパラメータの一覧に分解して確認できます。
使い方
- 「エンコード」または「デコード」を選びます。
- モードを選びます。クエリの値1つやパスのセグメント1つには「コンポーネント」、完全なアドレスの構造を保つには「URL全体」、スペースを+で書くapplication/x-www-form-urlencodedのデータには「フォーム」を選びます。
- 入力欄にテキストを入力または貼り付けます。結果は入力に合わせて更新されます。
- 「結果をコピー」で結果をクリップボードにコピーするか、「入れ替え」で結果を入力に移して方向を逆にします。
- 完全なURLを貼り付けると、結果の下にあるURLインスペクターに、その構成要素とデコードされたクエリパラメータが表示されます。
主な機能
- 3つのエンコードモード: コンポーネント(encodeURIComponent)、URL全体(encodeURI)、スペースを+にするHTMLフォームのエンコードがあります。
- Unicodeに完全対応: 日本語などラテン文字以外の文字や絵文字も、ブラウザと同じようにUTF-8のバイト列としてエンコードします。
- わかりやすいエラーメッセージ: デコードに失敗したときは、不正な%シーケンスがどこにあるか、またはバイト列が有効なUTF-8でないことを表示します。
- URLインスペクター: ホスト、ポート、パス、フラグメント、そしてすべてのクエリパラメータを、重複したキーも含めてデコードした形で表示します。
- プライバシーを重視した設計: すべてブラウザ内で処理されるため、トークンや個人情報を含むURLがどこかに送信されることはありません。
使用例
検索クエリをエンコードする
"coffee & cake"を?q=…の値として渡すには、コンポーネントモードでエンコードします。結果はcoffee%20%26%20cakeです。エンコードしないと、&が新しいパラメータの始まりになってしまいます。
トラッキングリンクを読み解く
https://example.com/?redirect=https%3A%2F%2Fshop.example%2Fcart%3Fid%3D7 のような長いリンクを貼り付けると、redirectパラメータがhttps://shop.example/cart?id=7にデコードされることがわかります。
フォームのデータをデコードする
HTMLフォームから送信されたデータは、name=Jane+Doe&city=S%C3%A3o+Paulo のような形をしています。フォームモードでデコードすると"name=Jane Doe&city=São Paulo"になります。
制限事項と注意点
- URL全体モードでは / ? # & = などの予約文字をエンコードしないため、パラメータの値を1つだけエンコードするのには向きません。その場合はコンポーネントモードを使ってください。
- URL全体モードで"%2F"をデコードすると%2Fのまま残ります。decodeURIは予約文字を意図的にエスケープしたまま残すためです。
- ISO-8859-1やShift_JISなどの古いエンコードでパーセントエンコードされたデータはデコードできません。このツールはUTF-8のバイト列を前提にしています。
- URLインスペクターが使えるのは、https:などのスキームで始まる絶対URLだけです。
- 国際化ドメイン名は、ブラウザが返すpunycodeの形(たとえばxn--…)で表示されます。
よくある質問
encodeURIとencodeURIComponentの違いは何ですか?
encodeURIComponentはURLで特別な意味を持つ文字をすべてエスケープするので、値を1つ入れる場合に安全です。encodeURIは : / ? # & = などの文字をそのまま残すので、完全なURLがそのまま使えます。コンポーネントモードとURL全体モードは、この2つの関数に対応しています。
スペースは%20と+のどちらにすべきですか?
どちらも実際に使われています。%20はURLのどこでも正しい書き方です。+がスペースを意味するのは、HTMLフォームの送信(application/x-www-form-urlencoded)のクエリ文字列の中だけです。その形式を扱うときはフォームモードを使ってください。
「正しいUTF-8テキストにならない」と表示されるのはなぜですか?
%シーケンスの書き方は正しいものの、それが表すバイト列が有効なUTF-8テキストになっていません。たとえば、%C3の後に続くべきバイトがない場合です。データが別の文字セットでエンコードされたか、途中で切れた可能性があります。
URLはサーバーに送信されますか?
いいえ。エンコード、デコード、解析はこのページのJavaScriptで行われます。ページを読み込んだ後にインターネットから切断しても、ツールはそのまま動きます。