CoderTools

URLエンコーダー/デコーダー | CoderTools

説明

URLエンコーディングについて

URLエンコーディング(パーセントエンコーディングとも呼ばれる)は、特定の状況下でURI(統一資源識別子)の情報をエンコードするメカニズムです。パーセント文字'%'と2つの16進数から構成される文字トリプレットで特定の文字を置換することで構成されます。

URLエンコーディングは、URLに許可されていない文字が含まれている場合や、文字がURL構文で特別な意味を持つ場合に必要です。これにより、URLに含まれる文字に関係なく、URLをインターネット上で安全に送信できます。

注意: URLの異なる部分(スキーム、権限、パス、クエリ、フラグメント)には異なるエンコーディング規則があります。このツールは、クエリパラメータとフォームデータに適した標準URLエンコーディングを使用します。

一般的な文字とそのエンコーディング

文字 URLエンコード 説明
Space %20 スペース文字
! %21 感嘆符
" %22 引用符
# %23 ハッシュ/フラグメント識別子
% %25 パーセント文字
& %26 アンパサンド/クエリセパレータ
+ %2B プラス記号
= %3D イコール記号/クエリ値セパレータ
? %3F 疑問符/クエリインジケータ

一般的な使用例

例1:クエリパラメータ

Original: Hello World!

Encoded: Hello%20World%21

例2:メールアドレス

Original: [email protected]

Encoded: user%40example.com

例3:複雑なクエリ

Original: search=JavaScript & Node.js

Encoded: search%3DJavaScript%20%26%20Node.js

参考文献と関連資料

ベストプラクティス

クエリパラメータには encodeURIComponent() を使用

JavaScriptでは、個々のクエリパラメータ値には encodeURIComponent() を使用します。&、=、? を含むすべての特殊文字をエンコードします。これには encodeURI() を使用しないでください。

二重エンコードを避ける

すでにエンコードされた URL をエンコードすると壊れたリンクができます(例:% が %25 になる)。再度エンコードする前に、データがすでにエンコードされているか確認してください。

必要な場合のみエンコード

英数字(A-Z、a-z、0-9)と -_.~ はエンコード不要です。すべてをエンコードすると帯域幅の無駄になり、URL の可読性が低下します。

標準ライブラリ関数を使用

URL エンコードを手動で実装しないでください。組み込み関数を使用:encodeURIComponent()(JS)、urllib.parse.quote()(Python)、urlencode()(PHP)。

プラス記号を慎重に扱う

スペースは +(フォームエンコーディング)または %20(URL エンコーディング)としてエンコードできます。システムがどちらを期待するか把握してください。ほとんどの API はスペースに %20 を好みます。

ソースでエンコード

URL を構築する際にデータをエンコードし、後からではありません。URL 文字列を構築してから全体をエンコードすると、URL 構造が壊れます。

トラブルシューティング

デコードした URL にまだ %XX シーケンスがあるのはなぜですか?

URL が二重エンコードされている可能性があります。もう一度デコードを試してください。これは、すでにエンコードされた URL が再度エンコードされた場合に発生します。

+ 記号がスペースになるのはなぜですか?

フォームデータ(application/x-www-form-urlencoded)では、+ はスペースを表します。URL でリテラルのプラス記号が必要な場合、+ は %2B としてエンコードする必要があります。

サーバーが文字化けした文字を受信するのはなぜですか?

エンコーディングの不一致です。クライアントとサーバーの両方が UTF-8 エンコードされた値を期待していることを確認してください。非 ASCII 文字はパーセントエンコーディングの前に UTF-8 でエンコードする必要があります。

encodeURI() がクエリパラメータをエンコードしないのはなぜですか?

encodeURI() は全体の URI 用であり、&、=、? などの特殊文字を保持します。個々のパラメータ値には encodeURIComponent() を使用してください。