URLエンコードとは?日本語URLとパーセントエンコードの仕組み

日本語を含むURLをコピーしたとき、%E6%97%A5のような文字列になっているのを見たことがあるかもしれません。これは文字化けではなく、URLの中で日本語や記号を安全に扱うための表記です。

この記事の要点

文字列をすぐに変換したい方へ

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%9EUTF-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=日本語 URLhttps://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など別の文脈では、それぞれ適切なエスケープや検証が必要です。