👻

【URL】URLエンコード・デコードの基本と仕組み

に公開

はじめに

よく目にする「URLエンコード」「URLデコード」、この意味を理解していますでしょうか。
たとえば、検索ワードが %20 や %E3%81%82 のような形でURLに含まれているのを見たことはありませんか?Google検索の検索履歴になぜの文字列が出ることがあります。
本記事では、この「URLエンコード・デコード」の仕組みや必要性について、わかりやすく解説していきます。

エンコードとデコードの関係

https://tech.iimon.co.jp/entry/2024/12/13 より

URLエンコードとは

URLエンコードとは、URLに使えない文字や特別な意味を持つ文字を、安全にURLに含められるよう変換する仕組みです。またの名をパーセントエンコーディングといいます。
エンコードされた文字列の形式に %(パーセント記号)が使われることが由来です。
具体的には、URLに使えない文字(例えば日本語やスペースのような記号など)を、そのバイト値の16進数表現に変換し、その前に % を付けるというルールで変換が行われます。


https://bunny.net/academy/http/what-is-url-uniform-resource-identifier-and-percent-encoding/ より

このようにURLエンコードは、「文字を安全にネットワークで送るために、一旦バイト(数値)に変換して送る」という仕組みなのです。

URLエンコードの仕組み

URLエンコードでは、問題のある文字を「%」と16進数で表現します。
例えば、スペース(_)は%20に変換されます。

これは、「UTF-8」と「16進数への変換」という技術を使っています。

処理のステップは以下の3ステップです。
① 対象となる文字をバイト列(byte)に変換
② 各バイトを2桁の16進数に変換
③ それぞれの16進数の前に % を付ける

このような手順で文字がパーセントエンコードされます。

URLデコードとは

URLデコードとは、パーセントエンコーディングされた文字列を、元の文字列に戻す処理のことです。
例えば、%20はスペース(_)に変換されます。

処理のステップは以下の2ステップです。
① プログラムが1文字ずつ読み取っていき、文字列の中からパターン(% + 2桁の16進数)を見つけ出す
② 見つけたパターンは16進数なので、それを10進数に変換し、文字(ASCII)に変換する

このような流れでバイト列が文字に変換されます。

注意点

URLエンコードとURLデコードは、それぞれ文字列→バイト列、バイト列→文字列と変換されますが、変換のルールとして文字コードが適用します。
この文字コードがエンコードとデコードで違うもの、例えばエンコード時にはUTF-8、デコード時にはShift-JISのように選択してしまうと、文字化けが発生してしまいます。
エンコード・デコード時には、同じ文字コードを選択することが必要です。


https://tech.iimon.co.jp/entry/2024/12/13 より

まとめ

URLエンコードは、URLに使うことができない文字を % と16進数で表す仕組み、デコードはその逆で、人間が読める文字に戻す仕組みだということが理解できれば幸いです。
合わせて、文字化けを起こさないよう文字コードは統一するように気をつけましょう。

最後までお読みいただき、ありがとうございました。

参考・画像引用元

https://bunny.net/academy/http/what-is-url-uniform-resource-identifier-and-percent-encoding/
https://tech.iimon.co.jp/entry/2024/12/13
https://webukatu.com/wordpress/blog/26140/

Discussion