URL エンコード / デコード

テキストを URL 用にエンコード、またはエンコード済み URL をデコード。

100%プライベート — すべてブラウザ内で動作します。データはお使いの端末で処理され、インターネットに送信されることはありません。

このツールについて

この無料の URL エンコーダー / デコーダー は、テキストをパーセントエンコードして URL やクエリ文字列の中で安全に使えるようにし、エンコードされた URL を読める文字列に戻します。

UTF-8 を正しく処理するため、アクセント付きの文字、絵文字、非ラテン文字も壊れることなくエンコード・デコードできます。すべてブラウザー内で動作し、何もアップロードされません。

パーセントエンコードとは

URL に使える文字はごく限られています。それ以外のもの — 空白、引用符、&、#、?、アクセント付きの文字、日本語や中国語やアラビア語のすべて — は、送り出す前に書き換えなければなりません。

パーセントエンコードは、文字を % とそのバイト値の16進数表記に置き換えることでそれを行います。空白は %20 に、アンパサンドは %26 に、疑問符は %3F になります。考え方は Base64 と同じ — 扱いにくいデータを、うるさい通り道でも通れる形にする — のですが、1文字ずつ行うため、結果はおおむね読める形のまま残ります。

エンコードされるのはバイトなので、UTF-8 で1バイトを超える文字は複数のエスケープになります。é は2バイトなので %C3%A9 になります。漢字はふつう3バイトで、3つのエスケープになります。絵文字は4バイトです。日本語を含む URL をエンコードすると、あれほど長く見えるのはこのためです。

なぜ重要なのか:`&` の問題

これはこのツールが防ぐために存在する不具合で、ほとんどの人が一度は経験します。

クエリ文字列は値を & と = で区切ります。

/search?q=coffee&page=2

ここで誰かが Bed & Breakfast を検索したとします。そのまま入れると:

/search?q=Bed & Breakfast&page=2

サーバーからは3つのパラメーターに見えます — q は Bed になり、次に意味のない Breakfast というパラメーター、そして page。検索は何も告げずに違う結果を返します。値を先にエンコードすれば正しく動きます。

/search?q=Bed%20%26%20Breakfast&page=2

ここから原則が導かれます。URL 全体ではなく、値をひとつずつエンコードすること。 クエリ文字列を組み立てている & と = はそのまま残さなければなりません。値の中に含まれる & は残してはいけません。

値をエンコードするか、URL 全体をエンコードするか

ここがつまずきどころであり、JavaScript に2つの関数が存在する理由です。

encodeURIComponent は /、?、#、&、= も含めてほぼすべてをエンコードします。URL の一部分、つまり検索語、ファイル名、リダイレクト先、トークンなどに使います。ほとんどの場合これが必要なもので、このツールが行っているのもこれです。

encodeURI は構造を作る文字には手をつけません。すでに正しい完全な URL を渡され、使えない文字だけを整えればよい、という前提だからです。URL 全体に使うもので、単独の値に使ってはいけません。

URL 全体を Component 版でエンコードすると、すべての / が %2F になり、アドレスは機能しなくなります。値を URI 版でエンコードすると、& がそのまま通り抜けてクエリ文字列を壊します。どちらのつもりだったかを意識することが、すべての要点です。

HTML エスケープとは別物です

パーセントエンコードと HTML エスケープは見た目が似ていますが、別の問題を解決します。

パーセントエンコード(%20、%26)は URL の中でテキストを安全にします。HTML エスケープ(&、<)は HTML 文書の中で安全にします。ページに表示される URL は両方必要になることがあり、その順序は決まっています — まず URL 用にエンコードし、その結果を HTML 用にエスケープします。

もうひとつよく知られた癖があります。+ が空白を意味することがあるのです。これは HTML フォームの名残で、application/x-www-form-urlencoded は %20 ではなく + を使います。多くのサーバーはクエリ文字列ではどちらも受け付けますが、パスの中の + は文字どおりのプラス記号です。思わぬところで空白が + になっていたら、原因はフォームのエンコーダーです。

使い方

  • テキストまたは URL を入力欄に貼り付けます
  • ボタンでエンコードまたはデコードします
  • 入れ替えて、結果を入力欄に戻せます
  • 結果をコピーします

知っておくとよいこと

  • URL 全体ではなく、値をエンコードしてください。 完全なアドレスをエンコーダーに通すと、すべての / が %2F になって壊れます。
  • 二重にエンコードしないでください。 % 自体が %25 にエンコードされるため、2回通すと %20 が %2520 になり、空白が失われます。リンクが不可解に壊れる最も多い原因です。
  • 予約文字には意味があります — :、/、?、#、@、&、=、+、$ など。URL 内で使えますが、値の中に現れる場合はエンコードが必要です。
  • 非予約文字はエンコードされません: A–Z、a–z、0–9、-、_、.、~。
  • 16進数の大文字小文字は同じ意味です。 %3f と %3F は同一で、慣習では大文字が使われます。
  • 単独の % は無効です。 デコードに失敗したら、16進数2桁が続いていない % を探してください。文字列が途中で切れている合図であることが多いです。

よくある質問

URL の %20 は何を意味しますか?

空白です。空白は URL では使えないため、%20 としてパーセントエンコードされます。% に続く 20 は、空白のバイト値を16進数で表したものです。空白が + と書かれているのを見ることもありますが、これはフォームのエンコードに由来するものです。クエリ文字列ではどちらも通じますが、パスの中で正しいのは %20 だけです。

URL 全体をエンコードすべきですか、一部だけですか?

一部だけです。URL の中に入れる値 — 検索語、ファイル名、リダイレクト先など — をそれぞれエンコードし、URL の構造を作っている ://、/、?、&、= はそのままにします。完全な URL をエンコードするとスラッシュが %2F になり、アドレスとして解決できなくなります。

エンコードしたらリンクが壊れたのはなぜですか?

ほぼ確実に二重エンコードです。% 自体が %25 にエンコードされるため、すでにエンコード済みの文字列をもう一度通すと %20 が %2520 になります。デコードすると空白ではなく文字どおりの %20 が返ってきます。もう一度エンコードする前に、一度デコードして実際に何を持っているか確認してください。

アクセント付きの1文字が複数の % コードになるのはなぜですか?

パーセントエンコードが文字ではなくバイトを対象にしているからです。UTF-8 では é は2バイトなので %C3%A9 になります。漢字やハングルの多くは3バイトで3つのエスケープになり、絵文字は4バイトです。異常ではなく、その文字の大きさがそのまま表れているだけです。

URL エンコードと HTML エスケープの違いは何ですか?

守っている場所が違います。URL エンコード(%26)はウェブアドレスの中でテキストを安全にします。HTML エスケープ(&)は HTML ページの中で安全にします。ページに表示されるリンクは両方必要になることがあり、順序も決まっています。片方を他方の場所で使っても、元の問題は解決しません。

入力したテキストはサーバーに送信されますか?

いいえ。エンコードもデコードもブラウザー内で行われるため、貼り付けた内容が端末から出ることはありません。インターネット接続を切っても動作します。

関連ツール

新しいツールを定期的に追加しています。公開時にお知らせを受け取るにはYouTube でチャンネル登録してください。

他のツール

すべて表示

おすすめアプリ

すべて表示