URLエンコードのしくみ
URL には、アクセントのない英数字と一部の記号しか使えません。それ以外の文字は変換されます。UTF-8 では あ は E3、81、82 の 3 バイトで、%E3%81%82 になります。スペースは %20 で、フォームでは + です。
エンコード済み
%E6%9D%B1%E4%BA%AC%E3%81%AE%E5%AF%BF%E5%8F%B8
元に戻した結果
東京の寿司
よく見るURLエンコード
%E3%81%82= あ、%E3%81%84= い、%E3%82%A2= ア、%E3%82%AB= カ%E6%97%A5%E6%9C%AC%E8%AA%9E= 日本語、%E6%9D%B1%E4%BA%AC= 東京%E3%80%81= 、、%E3%80%82= 。、%E3%80%8C= 「、%E3%80%8D= 」%20= スペース、%2F= /、%3F= ?、%26= &、%25= %
日本語の文字は、ほとんどが 3 バイトです。そのため 1 文字が 9 文字分のコードになります。ひらがなは %E3%81 か %E3%82、カタカナは %E3%82 か %E3%83、漢字は %E4 から %E9 で始まるのが目印です。古いサイトでは Shift_JIS のコードも見かけます。%93%FA%96%7B は「日本」です。Mojibuster はこれも見分けて元に戻します。
URLエンコードされた文字が出る場面
- コピーしたリンク: ブラウザーは日本語のアドレスを読める形で表示しますが、コピーすると
%E6%9D%B1%E4%BA%ACのような形で貼り付けられることがあります。 - フォームとアクセス解析: 検索語や UTM パラメーターは、サーバーのログや解析ツールの書き出しにエンコードされたまま残ります。例:
?q=%E5%AF%BF%E5%8F%B8。 - エクスポートと API: メール配信ツールや Webhook は値をエンコードして保存することがあります。その場合、Excel や CSV には名前ではなくコードが並びます。
- ファイル名: サーバーがファイル名をデコードしないと、ダウンロードしたファイルが
%E8%AB%8B%E6%B1%82%E6%9B%B8.pdfのような名前になります。
コードと文字化けが同時に起きたとき
二重に壊れていることもあります。%E8%AD%9A%EF%BD%B1%E8%8E%A0%EF%BD%AC は、東京 が一度 Shift_JIS として読み間違えられ、その結果がエンコードされたものです。Mojibuster はまずコードを戻し、続けて Shift_JIS の文字化けを直します。最後に 東京 に戻ります。
このページでは コードも変換する がすでにオンです。HTML の文字参照(東)、メールのコード(=E6=9D=B1)、プログラムのエスケープ(\u6771)も一緒に変換します。ほかの文字化けは 文字化けとは をご覧ください。
Excel・JavaScript・Python・PHP で自分で戻す方法
- Excel: エンコードの関数(英語版では
ENCODEURL)はありますが、デコードの関数はありません。列をコピーしてここに貼り付け、結果を戻すのが簡単です。Excel の文字化けも参照してください。 - JavaScript:
decodeURIComponent("%E6%9D%B1%E4%BA%AC")で東京になります。 - Python:
urllib.parse.unquote("%E6%9D%B1%E4%BA%AC")。フォームの+をスペースにするならunquote_plusを使います。 - PHP:
rawurldecode()、フォームのデータならurldecode()です。
よくある質問
%E3%81%82 とは何ですか?
あ を URL エンコードしたものです。UTF-8 の 3 バイト E3、81、82 に、それぞれ % が付いています。%E3%81%84 なら い です。
%20 とは何ですか?
スペースです。フォームのデータでは + が使われることもあります。普通の文章の + は本当のプラス記号かもしれないので、Mojibuster はそのままにします。
リンクはアップロードされますか?
いいえ。変換はすべてブラウザー内で行われます。トークンやメールアドレスを含むリンクも、端末の外には出ません。
「100%」が変わらないのはなぜですか?
本物の特殊文字になる並びだけを変換するからです。100%、50 %、普通の文章の中の単独の %20 はそのまま残します。