URLエンコードとは?
URLエンコード(パーセントエンコーディングとも呼ばれます)は、RFC 3986で定義された仕組みで、任意のデータをURI(統一資源識別子)の中で安全に表現するために使われます。スペース、スラッシュ、疑問符、アンパサンド、そして日本語などの非ASCII文字といった多くの文字は、URLの中で特別な意味を持っていたり、そのままでは使えなかったりします。パーセントエンコーディングでは、こうしたバイトを1つずつ、パーセント記号(%)とそのバイト値を表す2桁の16進数に置き換えます。
このツールの使い方
プレーンテキストをURLで安全に使える文字列に変換するにはエンコードを、パーセントエンコードされた文字列を読める形に戻すにはデコードを選びます。テキストを入力または貼り付けて実行するだけです。入力と出力それぞれの文字数も表示されるので、エンコードによって文字列がどれだけ長くなったかをひと目で確認できます。
変換の仕組み
非予約(unreserved)文字の集合はA–Z a–z 0–9 - _ . ~です。この集合に含まれないバイトはすべてエンコード対象になります。エンコードの処理は次のように表せます。
たとえばスペースのバイト値は32で、16進数では0x20にあたるため、%20に変換されます。テキストはまずUTF-8でバイト列に変換されるので、絵文字やアクセント付き文字などのマルチバイト文字も、1バイトずつエンコードされます。デコードはこの逆の処理で、各%XXの3文字を16進バイトとして解釈し、集めたバイト列をUTF-8として読み戻します。
具体例で確認
hello world!をエンコードしてみましょう。h-e-l-l-oの各文字は非予約文字なのでそのまま残ります。スペースは%20に、感嘆符(バイト値33=0x21)は%21になります。その結果、hello%20world%21が得られます。
よくある質問
プラス記号はスペースとしてエンコードされますか? エンコード時、スペースは%20(RFC 3986形式)に変換されます。デコード時は、フォームデータとの互換性のため、リテラルの+はスペースとして扱われます。
なぜ変換されない文字があるのですか? 英字、数字、そして4つの非予約記号- _ . ~は、RFC 3986のもとでエンコードが不要なためです。
Unicodeに対応していますか? はい。テキストはUTF-8として処理されるため、ASCII以外の文字は複数の%XXバイトとしてエンコードされ、デコード時にも正しく元へ戻ります。