URLエンコードとは?日本語URLとパーセントエンコードの仕組み
日本語を含むURLをコピーしたとき、%E6%97%A5のような文字列になっているのを見たことがあるかもしれません。これは文字化けではなく、URLの中で日本語や記号を安全に扱うための表記です。
この記事の要点
- 日本語や記号をURLに含めるときは、
%E6のような表記に変換されることがあります。 - この変換をURLエンコード、またはパーセントエンコードと呼びます。
- エンコード済みのURLは、URLデコードで元の日本語や記号に戻せます。
URLエンコードとは何か
URLエンコードとは、日本語や記号、スペースなどをURLの中で正しく扱える形に変換することです。たとえば検索キーワードに日本語を入れたり、SNSで日本語を含むURLを共有したりするときに使われます。
たとえば「日本語」は、UTF-8のパーセントエンコードでは%E6%97%A5%E6%9C%AC%E8%AA%9Eになります。ブラウザやサーバーは、この表記を元の文字列として解釈できます。
なぜURLエンコードが必要なのか
URLでは、/、?、&、=、#などが構造を表す記号として使われます。これらを検索語やパラメータ値の一部として扱いたい場合、そのまま入れるとURLの区切りとして誤解されることがあります。
たとえば検索キーワードに「東京&大阪」と入れたい場合、&をそのまま使うと、URLの中では別のパラメータの区切りとして解釈されることがあります。そのため、値として扱いたい記号はエンコードして渡します。
URLエンコードを使うと、文字をデータとして明確に渡せます。特に検索キーワード、フォーム送信、APIリクエスト、SNS共有用URLでは、意図しない区切りを避けるために重要です。
日本語が%表記になる仕組み
日本語などの非ASCII文字は、まずUTF-8のバイト列へ変換されます。その後、各バイトを%と2桁の16進数で表します。
日 → UTF-8: E6 97 A5 → %E6%97%A5このように、見た目は長くなりますが、URLで扱えるASCII中心の表記に変換されます。
URLエンコードの例
| 元の文字列 | エンコード結果 | 補足 |
|---|---|---|
| 日本語 | %E6%97%A5%E6%9C%AC%E8%AA%9E | UTF-8の日本語 |
| 半角スペース | %20 | 通常のURLでよく使う表記 |
| 東京&大阪 | %E6%9D%B1%E4%BA%AC%26%E5%A4%A7%E9%98%AA | &を値として扱う例 |
| 😊 | %F0%9F%98%8A | 絵文字もUTF-8で表す |
| https://shinsu.jp/検索?q=日本語 URL | https://shinsu.jp/%E6%A4%9C%E7%B4%A2?q=%E6%97%A5%E6%9C%AC%E8%AA%9E%20URL | 日本語を含むURLの例 |
URLデコードとは
URLデコードは、URLエンコードされた表記を元の文字列へ戻す処理です。たとえば%E6%97%A5%E6%9C%AC%E8%AA%9EをURLデコードすると「日本語」になります。
URLエンコード:日本語 → %E6%97%A5%E6%9C%AC%E8%AA%9E
URLデコード:%E6%97%A5%E6%9C%AC%E8%AA%9E → 日本語
安全に使うための注意点
URLエンコードは、URLの中で文字を正しく扱うための変換です。HTMLへ表示するときのエスケープ、SQLのプレースホルダー、JavaScript文字列のエスケープとは目的が異なります。
URLエンコード済みだから安全、とは限りません。入力値を別の文脈で使う場合は、その文脈に合った検証やエスケープを行ってください。
よくある質問
URLエンコードとパーセントエンコードは同じ意味ですか?
ほぼ同じ文脈で使われます。URLエンコードの代表的な表現方法が、%と16進数でバイトを表すパーセントエンコードです。
日本語はなぜ%E6のような表記になるのですか?
日本語をUTF-8のバイト列に変換し、その各バイトを%と2桁の16進数で表すためです。
URLデコードとは何ですか?
%E6%97%A5のようなエンコード済み表記を、元の日本語や記号へ戻す処理です。
URLエンコードされた文字列はそのまま使っても大丈夫ですか?
URLとして使う場合は基本的に問題ありません。ただし、すでにエンコード済みの文字列をもう一度エンコードすると、%が%25になり、意図しないURLになることがあります。
URLエンコードすると入力内容は安全になりますか?
URLの中で扱いやすくはなりますが、セキュリティ対策そのものではありません。HTML表示やSQLなど別の文脈では、それぞれ適切なエスケープや検証が必要です。