URLエンコーダー
URLのエンコード・デコード
URLエンコーダー の使い方
URLのエンコード・デコード 無料オンラインツール、登録不要、広告なし。今すぐ無料でお使いいただけます。
URLエンコードが必要な場面
URLには限られたASCII文字のセットのみ含めることができます。スペース、日本語文字、句読点、非ASCII文字はURLで安全に転送するためにパーセントシーケンス(%XX)としてエンコードする必要があります。日本語を含むWebサービスでは特に重要です。
- クエリパラメータ:ユーザー入力をURLパラメータとして渡す場合はエンコードが必要です。「東京のカフェ」の検索クエリは
%E6%9D%B1%E4%BA%AC%E3%81%AE%E3%82%AB%E3%83%95%E3%82%A7になります。UTF-8の16進数表現に変換されます。 - APIリクエスト:APIのURLをプログラムで構築する際、パラメータをベースURLに追加する前にエンコードします。不正なリクエストやパラメーターインジェクションなどのセキュリティ脆弱性を防げます。
- フォーム送信:method="GET"のHTMLフォームはフォーム値をURLにエンコードします。このエンコードスキームを理解すると、フォーム送信のデバッグとサーバーログでの元の値の再構成に役立ちます。
- リンクの共有:日本語を含むURLを共有する場合、多くのプラットフォームは正しいエンコードなしにこれらを破損させます。特に異なるシステム間でのコピー&ペーストで問題が発生します。
- デバッグ:エンコードされたURLをデコードして元のパラメータを読みます。ブラウザのDevToolsやWebサーバーログでネットワークリクエストを検査する際に役立ちます。
エンコードルール:文字(A〜Z、a〜z)、数字(0〜9)、-_.~は決してエンコードされません。その他はすべて%に続く2桁の16進数でエンコードされ、その文字のUTF-8バイト値を表します。日本語1文字は通常3バイト(6桁の16進数)になります。
Frequently Asked Questions
JavaScriptのencodeURIとencodeURIComponentの違いは何ですか?
encodeURIはURL全体をエンコードし、URLで意味を持つ構造的な文字(/、?、&、#、:)はエンコードしません。encodeURIComponentは文字、数字、-_.~*以外のすべてをエンコードします。個々のパラメータ値には常にencodeURIComponentを使ってください。
スペースに+と%20の違いは何ですか?
両方ともURLエンコードでスペースを表しますが、コンテキストが異なります。%20はすべてのURLコンポーネントで正しい表現です。プラス記号はapplication/x-www-form-urlencoded(HTMLフォームデータ)でのみスペースを表します。パスセグメントでは使いません。
二重デコードなぜ問題になるのですか?
URLに%252Fが現れる場合、%2F(それ自体が/をエンコード)をエンコードしています。1回デコードすると%2F、2回デコードすると/になります。二重エンコードはURLが複数回エンコードされる時に発生します。サーバーがURLを複数回デコードするとパストラバーサル攻撃などのセキュリティ問題を引き起こします。
URLパスセグメントでエンコードすべき文字は?
特別な意味を持つ予約文字はパスセグメントでエンコードする必要があります:スペース(%20)、#(%23)、%(%25)、?(%3F)など。スラッシュ/はパス区切り文字で、パスセグメント内のリテラルのスラッシュには%2Fとしてエンコードしてください。
PunycodeとURLエンコードの関係は?
Punycodeは国際化ドメイン名(IDN)の非ASCII文字をASCII互換エンコードに変換します。「たとえば.jp」はPunycodeでドメイン部分が変換されます。パーセントエンコードとは異なり、ドメイン名にのみ適用されます。パスやパラメータには適用されません。
URLエンコード vs Base64 vs HTMLエンティティ
URLエンコード(パーセントエンコード)はデータをURLに安全にします。Base64エンコードはバイナリデータをテキストコンテキスト(メール、JSON)に安全にします。HTMLエンティティは特殊文字をHTMLに安全にします:&は&に、<は<になります。それぞれ同じ問題(制限された文字セットでのデータ表現)を異なる対象コンテキスト向けに解決します。コンテキストに合っていないエンコードを使うと表示エラーやセキュリティ脆弱性が生じます。