URLエンコード・デコード
URLエンコード(パーセントエンコーディング)とデコードを双方向に変換します。
他のツール
URLエンコードとは?
URLエンコード(パーセントエンコーディング)とは、URL内で使用できない文字を「%」と16進数の組み合わせに変換する仕組みです。例えば、日本語の「東京」は「%E6%9D%B1%E4%BA%AC」に変換されます。
URLにはASCII文字(英数字と一部の記号)しか使えないというRFC 3986の仕様があるため、日本語・スペース・特殊記号などはパーセントエンコーディングで変換する必要があります。Webブラウザのアドレスバーでは自動的に変換される場合もありますが、プログラムやAPIで扱う際には明示的にエンコード・デコードが必要になります。
JavaScriptではencodeURIComponent()とencodeURI()の2つの関数が用意されており、用途に応じて使い分けます。パラメータ値のエンコードにはencodeURIComponent()が推奨されます。
使い方
- テキストを入力:上部の入力欄に、URLエンコードしたいテキストやURLを入力します。
- エンコード:「エンコード」ボタンをクリックすると、下部にパーセントエンコーディング済みの文字列が表示されます。
- デコード:パーセントエンコーディングされた文字列を復元したい場合は、下部の欄に入力して「デコード」ボタンをクリックします。
- エンコード方式の切替:「encodeURIComponent」チェックボックスで、encodeURIとencodeURIComponentを切り替えられます。
- コピー:結果をワンクリックでクリップボードにコピーできます。
活用シーン
- 日本語を含むURLをメールやチャットで共有する際のエンコード
- APIのクエリパラメータに日本語や特殊文字を含める際の変換
- 受け取ったパーセントエンコーディング済みURLの中身を確認
- HTMLフォームのPOSTデータやGETパラメータのデバッグ
- Google AnalyticsのUTMパラメータに日本語を含める際の変換
- Web開発でリダイレクトURLやコールバックURLを組み立てるとき
URLで使える文字・使えない文字一覧
URLに使用できる文字はRFC 3986で定義されています。以下の表で、エンコードが必要な文字とそうでない文字を確認できます。
| 分類 | 文字 | エンコード要否 |
|---|---|---|
| 英小文字 | a-z | 不要(そのまま使用可能) |
| 英大文字 | A-Z | 不要(そのまま使用可能) |
| 数字 | 0-9 | 不要(そのまま使用可能) |
| ハイフン・ピリオド等 | - . _ ~ |
不要(非予約文字) |
| URL構造文字 | : / ? # [ ] @ ! $ & ' ( ) * + , ; = |
予約文字(パラメータ値内では要エンコード) |
| スペース | (半角スペース) | 必要(%20 または +) |
| 日本語 | あ、漢、カ など | 必要(UTF-8バイト列を%XXに変換) |
| その他の記号 | " < > { } | \ ^ ` % |
必要 |
| 制御文字 | タブ、改行 など | 必要 |
encodeURIとencodeURIComponentの違い
JavaScriptには2つのURL用エンコード関数があります。用途に応じた使い分けが重要です。
| 比較項目 | encodeURI() | encodeURIComponent() |
|---|---|---|
| 用途 | URL全体のエンコード | パラメータ値のエンコード |
| エンコードしない文字 | : / ? # [ ] @ ! $ & ' ( ) * + , ; = - . _ ~ |
- . _ ~ ! ' ( ) * |
| スペースの変換 | %20 | %20 |
/ の扱い |
エンコードしない | %2F にエンコード |
& の扱い |
エンコードしない | %26 にエンコード |
= の扱い |
エンコードしない | %3D にエンコード |
| 推奨場面 | 完全なURLをそのまま渡す時 | クエリパラメータの値を渡す時 |
HTTPステータスコード一覧
URLを扱う際に知っておくと便利なHTTPステータスコードの一覧です。Web開発やAPIデバッグの際にご活用ください。
| コード | 名称 | 説明 |
|---|---|---|
| 200 | OK | リクエスト成功 |
| 201 | Created | リソースの作成に成功 |
| 204 | No Content | 成功したがレスポンスボディなし |
| 301 | Moved Permanently | 恒久的なリダイレクト |
| 302 | Found | 一時的なリダイレクト |
| 304 | Not Modified | キャッシュが有効(変更なし) |
| 400 | Bad Request | リクエストが不正(パラメータエラー等) |
| 401 | Unauthorized | 認証が必要 |
| 403 | Forbidden | アクセス権限がない |
| 404 | Not Found | リソースが見つからない |
| 405 | Method Not Allowed | 許可されていないHTTPメソッド |
| 408 | Request Timeout | リクエストがタイムアウト |
| 429 | Too Many Requests | レート制限に到達 |
| 500 | Internal Server Error | サーバー内部エラー |
| 502 | Bad Gateway | ゲートウェイのエラー |
| 503 | Service Unavailable | サービス一時停止中 |
| 504 | Gateway Timeout | ゲートウェイのタイムアウト |
よくある質問
encodeURIとencodeURIComponentの違いは?
encodeURI()はURL全体をエンコードしますが、「:」「/」「?」「#」「&」「=」などURL構造に必要な文字はエンコードしません。encodeURIComponent()はこれらの文字もすべてエンコードするため、クエリパラメータの値など部分的なエンコードに適しています。
URLエンコードとBase64エンコードの違いは?
URLエンコードはURL内で使えない文字を%XX形式に変換する方式で、WebブラウザやHTTPリクエストで使用します。Base64はバイナリデータをASCII文字列(A-Z、a-z、0-9、+、/)に変換する方式で、メールやAPIでのデータ送信に使います。目的と用途が異なります。
スペースは「+」と「%20」のどちらにエンコードされる?
encodeURIComponent()ではスペースは「%20」に変換されます。HTMLフォーム送信(application/x-www-form-urlencoded)では「+」に変換されます。RFC 3986の標準では「%20」が正式な表記です。
日本語URLをエンコードする必要がある理由は?
URLの仕様(RFC 3986)ではASCII文字のみが使用可能です。日本語などのマルチバイト文字をURLに含めるには、UTF-8でバイト列に変換した上で各バイトを%XX形式にエンコードする必要があります。
入力したデータはサーバーに送信されますか?
いいえ、このツールではすべての処理がお使いのブラウザ内で完結します。入力したテキストやURLが外部のサーバーに送信されることは一切ありません。安心してご利用ください。