使い方
- テキストまたは URLに文字列またはリンクを貼り付けます。
- 操作でエンコードかデコードを選びます。
- 検索語のような1つの値なら、範囲は1つの値のままにします。リンク全体なら、URL全体を選びます。
- 結果を読みます。テキストがクエリを持つリンクなら、クエリのパラメータの表も読みます。
パーセントエンコードの働き
Web アドレスに使えるのは、限られた文字だけです。それ以外の文字は、UTF-8の形の各バイトについて、% 記号と16進数の2桁で書かれます。例えば、「あ」は UTF-8で3バイトの E3 81 82なので %E3%81%82になり、空白は %20になります。規則は RFC 3986の2.1節にあります。
あ → UTF-8バイト E3 81 82 → %E3%81%82
- 1つの値で符号化すると、英字の A から Z、a から z、数字の0から9、そして - _ . 「!」 ~ * ' ( ) はそのまま残ります。
- デコードでは、有効な %XX のすべてをバイトに戻し、そのバイトを、形作る文字に戻します。
1つの値か、URL全体か
1つの値は区切り文字も符号化します(: / ? # & = と +)。そのため、クエリの値がアドレスの構造を壊すことはありません。URL全体は、それらの区切り文字をそのまま残すため、リンクの形が保たれます。URL全体をデコードするときは、%2F のように区切り文字を表すエスケープは、エスケープされたまま残るため、リンクは同じ意味を保ちます。
フォームの符号化と + 記号
HTML フォームは、空白を + で、プラス記号を %2B で書きます。そのため、フォームが書いたクエリ文字列の + は、空白を意味します。フォームの符号化の設定は、その規則を読み書きします。オフのときは、RFC 3986のとおり、+ はプラス記号のままです。
デコードが拒否するもの
- 2桁の16進数が続かない % 記号。例えば %E3%81%A の末尾です。
- 正しい UTF-8にならないエスケープ。例えば1バイトだけの %FF です。
- 壊れた文字。例えば絵文字の半分で、エンコードできません。
例:検索リンク
値「東京 & 大阪?」を1つの値でエンコードすると、%E6%9D%B1%E4%BA%AC%20%26%20%E5%A4%A7%E9%98%AA%3F になります。空白、アンパサンド、3バイトずつの漢字、疑問符は、すべてエスケープされます。
https://example.com/検索?q=%E6%9D%B1%E4%BA%AC+%E3%82%AB%E3%83%95%E3%82%A7&page=2を、URL全体とフォームの符号化にチェックを入れてデコードすると、https://example.com/検索?q=東京 カフェ&page=2になります。クエリには2つのパラメータがあり、q は「東京 カフェ」、page は2です。
| 入力 | 結果 |
|---|---|
| 東京 & 大阪?(1つの値、エンコード) | %E6%9D%B1%E4%BA%AC%20%26%20%E5%A4%A7%E9%98%AA%3F |
| https://example.com/検索?q=%E6%9D%B1%E4%BA%AC+%E3%82%AB%E3%83%95%E3%82%A7&page=2(デコード) | https://example.com/検索?q=東京 カフェ&page=2 |
よくある質問
encodeURI と encodeURIComponent の違いは何ですか?
encodeURIComponent は、すべての区切り文字をエスケープするため、クエリ文字列の1つの値に向いています。encodeURI は、: / ? # & = のような URL の構造を与える文字を残すため、リンク全体に向いています。1つの値は前者、URL全体は後者に当たります。
空白が、ある場所では %20で、別の場所では + になるのはなぜですか?
%20は空白の標準的なエスケープで、URL のどこでも有効です。+ が空白を意味するのは、HTML フォームが書いたクエリ文字列のフォームの符号化の中だけです。リンクがフォームから来た場合は、フォームの符号化にチェックを入れてください。
%E3%81%A が拒否されるのはなぜですか?
%E3は3バイトの文字の始まりですが、文字列が %A の後で終わり、エスケープが完成していないためです。% 記号ごとに16進数の2桁が必要で、各バイトは完全な UTF-8の文字に属していなければなりません。
リンクはサーバーに送られますか?
いいえ。エンコードとデコードは、お使いのブラウザが行います。そのため、トークンや個人データを含むリンクも、お使いの機器の中にとどまります。
デコードしたパラメータに、プラス記号が残るのはなぜですか?
フォームの符号化がオフのとき、+ は RFC 3986の定義どおり、プラス記号のままです。多くの Web フォームは空白を + で書くため、そのようなリンクをフォームの意図どおりに読むには、その設定をオンにしてください。
出典
- RFC 3986:URI の一般構文、2.1節(IETF)(英語)
- ECMA-262:ECMAScript 仕様の encodeURI、encodeURIComponent、decodeURI(英語)
- WHATWG URL 標準:application/x-www-form-urlencoded の解析(英語)
数値と文章の最終確認日:2026年11月10日火曜日。