このツールとは?
URLエンコーディング(パーセントエンコーディング)とは、URLで使用できない文字を、「%」の後にそのバイト値を16進数で表記した文字列に置き換える手法です。たとえば、スペースは「%20」になり、「你」は「%E4%BD%A0」になります。 これを行わないと、スペース、&、?、および非ASCII文字などの文字によって、URLの構造が破損したり、サーバーによって誤って解釈されたりしてしまいます。
一般的に求められるニーズは2つあり、このツールはどちらもサポートしています。1つはクエリパラメータ内の値をエンコードすること(コンポーネントモード — /、?、= もエンコードします)、もう1つはURLの構造を維持したままURL全体をエンコードすることです(フルURLモード — ://、?、& はそのまま残します)。
なぜこれを使うのか?
- クエリ文字列を安全に作成しましょう。&、=、またはスペースを含むユーザー入力があっても、URLが破損することはありません。
- ログ、分析データ、またはリダイレクトチェーンに含まれる長いエンコード済みURLをデコードし、その実際の内容を把握します。
- 中国語、絵文字、その他の非ASCIIテキストに対するUTF-8の処理を修正しました。
- 2つのモードが用意されており、URL全体の「:」や「/」を誤ってエンコードしてしまうことを防ぎます。
- 無料、即時、アップロード不要。
使い方
- テキストまたはURLを入力欄に貼り付けてください。
- モードを選択してください。クエリパラメータに指定する値の場合は「コンポーネント」、URL全体の場合は「フルURL」を選択してください。
- 「エンコード」または「デコード」をクリックしてください。
- 結果をコピーしてください。
例
入力
https://example.com/search?q=hello world & 你好出力
Component mode: https%3A%2F%2Fexample.com%2Fsearch%3Fq%3Dhello%20world%20%26%20%E4%BD%A0%E5%A5%BD
Full URL mode: https://example.com/search?q=hello%20world%20&%20%E4%BD%A0%E5%A5%BDコンポーネントモードでは構造文字もエンコードされますが、フルURLモードではそれらが保持されます。
一般的な利用例
- 検索語句やフィルタ値がユーザー入力によるもので、スペースや「&」、その他の特殊文字が含まれる可能性がある場合、それらを適切に処理した共有可能なURLを生成する。
- メールや広告キャンペーンに含まれる長いトラッキングURLやリダイレクトURLを解析し、クリックする前に実際のリンク先やパラメータを確認する。
- クエリパラメータがサーバーで正しく読み込まれない原因をデバッグする場合、多くの場合、エンコードされるべきだったにもかかわらずエンコードされていなかった予約文字が原因となっています。
- URLのクエリ文字列で使用する、英語以外の言語(中国語、日本語、アラビア語など)の値を準備する。
encodeURIComponent と encodeURI の実用上の違い
これらは、このツールの 2 つのモードに直接対応しており、開発者がすでに知っている実際の JavaScript 関数に対応しています。 encodeURIComponent(コンポーネントモード)は、ごく一部の予約されていない文字を除きすべてをエンコードするため、URLに挿入される任意の単一の値を安全に扱えます。これは、クエリパラメータ、パスセグメント、またはハッシュフラグメントの値に使用します。 encodeURI(フルURLモード)は、URLの構造を構成する文字(:, /, ?, #, &, =) はそのまま残します。これは、生の値ではなく、すでに構造化されたURL全体をエンコードしていると想定しているためです。単一のパラメータ値に対してこれを使用すると、その値に含まれる可能性のある & や = 文字がエンコードされず、モードを誤って選択した際に最もよく見られるミスとなります。
予約文字と非予約文字
URL仕様(RFC 3986)では、文字は2つのグループに分類されます。予約されていない文字(英字、数字、- _ . ~)は常に安全であり、エンコードされることはありません。一方、予約文字(: / ? # [ ] @ ! $ & ' ( ) * + , ; =)はURL構造において特別な意味を持ち、構造上の区切り記号としてではなく、リテラルデータとして現れる場合にのみエンコードが必要です。 まさにこれが、2つのモードが存在する理由です。コンポーネントモードは予約文字を保護すべきデータとして扱い、フルURLモードはそれらを保持すべき構造として扱います。 この区別を理解することは、どのモードをいつ使用すべきかを暗記するよりも有用です。なぜなら、特定の URL においてその文字が果たす役割に応じて、同じ文字(& など)がエンコードされることもあれば、そのまま扱われることもある理由を説明してくれるからです。
よくある質問
コンポーネントモードとフルURLモードは、それぞれどのような場合に使用すべきですか?
クエリパラメータ内に含まれる単一の値をエンコードする場合はコンポーネントモード(encodeURIComponent)を使用します。このモードでは、URLを破損させないよう、/、?、&、および=がエンコードされます。完全なURLをエンコードする場合はフルURLモード(encodeURI)を使用します。このモードでは、URLが正常に機能し続けるよう、構造を構成する文字が保持されます。
スペースの代わりに「+」ではなく「%20」が表示されたのはなぜですか?
どちらも、状況に応じて有効です。%20はスペースを表す汎用的なパーセントエンコーディングです。+は、古い形式であるapplication/x-www-form-urlencodedを使用するクエリ文字列内でのみ、スペースを表します。このツールでは、どこでも機能する%20を使用しています。
なぜデコードがエラーで失敗するのですか?
入力には、% の後に 2 桁の 16 進数が続かないなど、形式が不正なパーセント記号の連続が含まれています。これは、URL が切り詰められたり、二重にデコードされたりした場合によく発生します。不正なパーセント記号の連続を修正するか、削除してください。
ダブルエンコーディングとは何ですか?
すでにエンコード済みのテキストを再度エンコードする場合:%20は%2520になります。これは、%そのものが%25にエンコードされるためです。これはよくあるバグです。デコードした出力にまだ%コードが含まれている場合は、もう一度デコードしてください。
これは漢字や絵文字に対応していますか?
はい。テキストはUTF-8バイトとしてエンコードされるため、「你好」は「%E4%BD%A0%E5%A5%BD」となり、完全に復元されます。これは、ブラウザでも採用されている動作と同じです。