URLエンコード/デコード
日本語や記号を含む文字列を、URLで安全に使える形式(パーセントエンコーディング)に変換したり、元に戻したりできます。処理はすべてブラウザ内で行われ、入力内容が外部に送信されることはありません。
入力
結果
URLエンコードとは
URLには、英数字と一部の記号しかそのまま使えません。日本語やスペース、& や ? などの記号をURLに含めると、意味が壊れたり正しく届かなかったりします。そこで、これらを % と16進数の組み合わせ(例:スペース→%20、「あ」→%E3%81%82)に置き換えるのがURLエンコード(パーセントエンコーディング)です。検索キーワードをURLに載せるときなどに使われます。
「URL全体として扱う」の使い分け
チェックを外した状態(encodeURIComponent)は、クエリの値1つをエンコードする用途です。: / ? & = などの記号もすべて変換します。チェックを入れた状態(encodeURI)は、URL全体を対象にし、区切りとして必要な記号は残します。「検索ワードだけを安全にしたい」ときはチェックなし、「URL全体のうち日本語部分だけ直したい」ときはチェックあり、が目安です。
ハマりやすいポイント
「+」と「%20」はどちらも半角スペース、でも文脈が違う。 URLのパス部分ではスペースは %20 になります。一方、フォーム送信で使われるクエリ文字列(application/x-www-form-urlencoded 形式)では、歴史的にスペースが + で表されます。「+が空白に戻らない」「逆に空白が+になる」といったトラブルの多くは、この2つの流儀の取り違えが原因です。
二重エンコードに注意。 エンコード済みの文字列をもう一度エンコードすると、%自身が %25 に変わり、%20 は %2520 になってしまいます。リンクを受け渡すうちに変換が二重にかかってリンク切れになるのは定番のミスです。おかしいときは、文字列に %25 が紛れ込んでいないかを疑ってください。
前提はUTF-8。 「あ」が %E3%81%82 になるのは、UTF-8でのバイト列(E3 81 82)を1バイトずつ %XX に置き換えているからです。今のWebはUTF-8が標準ですが、古いシステムではShift_JISでエンコードされたURL(同じ「あ」でも %82%A0)に出くわすことがあります。文字化けするときは、送り手と受け手の文字コードが合っているかを確認します。
よくある質問
Q. 「+」は半角スペース?
A. フォーム送信などでは、半角スペースが + で表されることがあります。本ツールのデコードでは + を半角スペースとして解釈します。
Q. デコードでエラーが出る。
A. % の後ろが正しい16進数2桁になっていない場合、デコードできません。エンコードしたいときは「エンコード →」を押してください。
Q. コマンドで変換するには?
A. Pythonが手軽で確実です。python3 -c "import urllib.parse; print(urllib.parse.quote('検索 ワード'))" でエンコードできます(スペースを + にしたい場合は quote を quote_plus に変えます)。デコードは urllib.parse.unquote を使います。