コロン (:) のURLエンコード
コロン文字 (:) を%3AにURLエンコードする方法を解説。URLスキームやポート番号における予約された役割と、エンコードが必要な場面を学びましょう。
Character
:
Encoded
%3A
詳細な説明
コロン(:)はURLにおいて2つの主要な構造的役割を持つ予約文字です。スキームとURLの残り部分を分離し(例:https:)、ホストとポート番号を分離します(例:localhost:3000)。コロンがパスセグメントやクエリパラメータ値のデータとして現れる場合は、%3Aにエンコードすべきです。
percent-encoding形式: %3Aはコロンを表します(ASCIIコード58、16進数で0x3A)。
コロンの構造的役割:
- スキーム区切り:
https://、ftp://、mailto:— スキーム名の後のコロンは構造的 - ポート区切り:
example.com:8080— ホストとポート番号を分離 - userinfo区切り:
user:password@host— ユーザー名とパスワードを分離(非推奨)
JavaScriptでの動作:
encodeURIComponent("10:30 AM") // "10%3A30%20AM"
encodeURIComponent("localhost:3000") // "localhost%3A3000"
encodeURI("https://example.com:8080") // "https://example.com:8080" (構造的なコロンを保持)
エンコードが必要な場面: 一般的にコロンのエンコードが必要なのは以下の場合です:
- クエリパラメータとして渡す時刻の値:
?time=10%3A30%3A00 - 特定のコンテキストでのIPv6アドレス(ブラケットがほとんどのケースを処理するが)
- 単一パラメータ内のキーバリュー形式のデータ:
?filter=status%3Aactive - パラメータとして渡すWindowsファイルパス:
?path=C%3A%5CUsers
エンコードが任意の場合: RFC 3986では多くの場合、パスセグメントやクエリ文字列内のエンコードされていないコロンを許可しています。ブラウザは通常、パス内のエンコードされていないコロンを正しく処理します(例:/article/2026-01-15T10:30:00)。ただし、一部のプロキシやセキュリティフィルタがエンコードされていないコロンを拒否・誤解釈する可能性があるため、相互運用性のためにはエンコードがより安全です。
落とし穴: URLをパラメータ値として渡す場合、https://のコロンも他のすべてと一緒にエンコードする必要があります。コールバックURLやリダイレクトパラメータの構築時にこれを忘れることは、バグの一般的な原因です。URL値全体にencodeURIComponent()を使用してください:?redirect=https%3A%2F%2Fexample.com。
ユースケース
APIクエリパラメータでタイムスタンプや時刻形式の値を渡す場合。例えば、14:30:00のような時刻値を受け付けるスケジューリングエンドポイントなど。