パーセントエンコーディングとは、 URL に使用できない文字をパーセント記号 (%) と 16 進数 2 桁で表現する変換方式です。 RFC 3986 で定義された URL エンコーディングの正式名称であり、日本語や特殊文字を URL に含める際に必須の技術です。
たとえば、日本語の「東京」は UTF-8 で 6 バイト (E6 9D B1 E4 BA AC) であり、パーセントエンコーディングすると %E6%9D%B1%E4%BA%AC になります。スペースは %20 、アンパサンド (&) は %26 、プラス (+) は %2B に変換されます。
パーセントエンコーディングで注意すべき点は、エンコード対象の文字セットです。 RFC 3986 では、英数字と - . _ ~ は「非予約文字」としてエンコード不要、 : / ? # [ ] @ ! $ & ' ( ) * + , ; = は「予約文字」として文脈に応じてエンコードが必要と定義されています。二重エンコード (既にエンコードされた文字列を再度エンコードしてしまう) も実務上よくあるバグです。 %20 が %2520 になってしまうケースです。
短縮 URL サービスでは、ユーザーが入力した URL のパーセントエンコーディングを正しく処理することが重要です。日本語を含む URL を短縮する際、エンコード済みの URL とデコード済みの URL を同一の短縮 URL に紐づける正規化処理が必要です。関連書籍は Amazon でも探せます。