URLエンコード
URLエンコード・デコード
入力
結果
URLエンコードって何のためにあるの?
URLに使えるのは英数字と一部の記号だけ。日本語やスペース、特殊文字はそのままURLに入れるとエラーの原因になります。そこで「%XX」という形式に変換するのがURLエンコード(パーセントエンコーディング)です。
encodeURIComponentとencodeURIの違い
JavaScriptには似た名前の関数が2つあります。encodeURIComponent()はパラメータ値のエンコードに使い、スラッシュや?も変換します。encodeURI()はURL全体に使い、URLの構造文字はそのまま残します。使い分けが重要です。
なぜURLエンコードが必要なの?
URLのルール(RFC 3986)では、使える文字は英数字と一部の記号(-._~)だけと決まっています。日本語の検索ワードやスペースがURLに入ると、サーバーが正しく読み取れないことがあります。特に&や=はクエリパラメータの区切りに使われるため、データの中にこれらが含まれるなら必ずエンコードしないとバグの原因になりますよ。
どんな文字がエンコードされるの?
スペースは%20(またはフォームでは+)に、&は%26、=は%3D、?は%3Fに変換されます。日本語の「東京」はUTF-8だと%E6%9D%B1%E4%BA%ACのように、1文字が複数の%XXになるんですね。スラッシュ(/)はURLのパス区切りに使うので、パラメータの値の中に含まれるときだけエンコードすればOKです。
開発者向け:URLエンコードで気をつけること
URL全体をエンコードするのではなく、クエリパラメータの値だけをエンコードしてください。JavaScriptならencodeURIComponent()、Pythonならurllib.parse.quote()が定番です。ありがちなミスは二重エンコーディング。すでにエンコード済みの文字列をもう一度エンコードすると%25XXのような文字化けが発生します。APIリクエストでは、パラメータ値に特殊文字が入る可能性を常に考えて、エンコードを習慣づけるのが安全ですよ。