ByteCompress

URLエンコーダー

HTTPリクエスト、クエリ文字列、フォームデータで安全に送信できるように、URLや個々のURIコンポーネントの特殊文字をパーセントエンコードします。RFC 3986に従います。

0 chars
FreeClient-sideNo signup

URLクエリ文字列内のスペース文字は、リクエストを静かに壊します。RFC 3986(Uniform Resource Identifier: Generic Syntax)は、URL内で安全な文字とパーセントエンコードが必要な文字を定義しています。パーセントエンコーディングは、安全でないバイトをそれぞれ%の後に2桁の大文字の16進数を付けて置き換えます。このブラウザベースのエンコーダーは、データをどこにも送信することなく、RFC 3986を即座に適用します。フルURLまたは個々のクエリパラメータ値をエンコードするために使用し、常に標準に準拠した出力を得てください。

URLのエンコード方法

  1. 入力フィールドにURLまたはテキストを貼り付けます。
  2. フルURLモードを選択して安全でない文字のみをエンコードするか、コンポーネントモードを選択して&=を含むすべての特殊文字をエンコードします。
  3. パーセントエンコードされた出力が結果パネルに表示されます。
  4. リクエスト、コード、またはドキュメントで使用するためにエンコードされた文字列をコピーします。

パーセントエンコーディングの理解

RFC 3986標準

RFC 3986 (IETF, 2005)はURI内の2つの文字カテゴリを定義しています。予約されていない文字A-Z a-z 0-9 - _ . ~)はエンコードなしで表示できます。予約された文字: / ? # [ ] @ ! $ & ' ( ) * + , ; =)は特別な構造的意味を持ち、文脈に応じてエンコードが必要な場合とそうでない場合があります。他のすべての文字 - スペース、非ASCII Unicode、これらのセット外の文字を含む - はパーセントエンコードされなければなりません。

encodeURIとencodeURIComponent

JavaScriptは2つのエンコーディング関数を提供します。encodeURI()は完全なURLをエンコードし、予約された文字をそのままにしておきます。これは構造的な役割を果たします。encodeURIComponent()は構造的な文字もエンコードし、それらをリテラルデータとして扱います - これは&=がURL構文を壊す場合に、個々のクエリパラメータ名と値のために設計されています。このツールのフルURLモードはencodeURIに対応し、コンポーネントモードはencodeURIComponentに対応します。

入力

Hello World! @2024

出力(コンポーネントモード)

Hello%20World!%20%402024

スペースは%20(RFC 3986標準)としてエンコードされ、@%40になります。感嘆符は文脈によっては予約されていない文字であり、モードによってはエンコードされる場合とされない場合があります。

一般的な使用例

  • クエリパラメータの値 - &=、または+を含む値をURLに追加する前にエンコードします
  • 検索エンジンのクエリ - リダイレクトURLを構築する前にユーザーの検索入力をエンコードします
  • APIリクエストの構築 - スラッシュ、スペース、または特殊文字を含むパスセグメントをエンコードします
  • OAuthパラメータ - OAuth 1.0の署名ベース文字列はRFC 5849に従ってパーセントエンコードが必要です

一般的な間違い

  • 二重エンコーディング - 値がすでにパーセントエンコードされている場合、再度エンコードすると%自体がエンコードされ、%2520が生成されます(%20ではなく)
  • パラメータ値にフルURLモードを使用すること - フルURLモードは&=をエンコードせず、クエリ文字列の構文を壊します。パラメータ値にはコンポーネントモードを使用してください
  • 非ASCII文字を忘れること - 非ASCIIテキストは最初にUTF-8バイトに変換され、その後各バイトが個別にパーセントエンコードされる必要があります

プロセスを逆にするには、URLデコーダーを使用します。URLクエリパラメータで運ばれるバイナリデータは、最初にBase64エンコーダーをURL安全モードでエンコードし、その後出力は追加のパーセントエンコーディングなしで既にURL安全です。

よくある質問

URLエンコーディングとBase64エンコーディングの違いは何ですか?

パーセントエンコーディングは、安全でない文字を%XXの16進数シーケンスに置き換え、安全な文字はそのまま保持します。そのため、出力の長さは入力に似ています。Base64はすべてのデータを64文字のアルファベットに変換し、サイズを33%増加させますが、結果は安全なASCII文字のみを含むことを保証します。パーセントエンコーディングは特定の文字をURL安全にし、Base64は任意のバイナリデータをテキストとしてエンコードします。

JavaScriptでencodeURIとencodeURIComponentをいつ使うべきですか?
encodeURI()は完全なURLをエンコードするためのもので、: / ? # & =のような構造的な文字を保持します。encodeURIComponent()はURL内の個々の値をエンコードするためのもので、構造的な文字をエンコードし、それらをURL構文ではなくリテラルデータとして扱います。疑わしい場合は、ユーザー提供の入力にはencodeURIComponent()を使用してください。
なぜスペースが一部のエンコーダーでは%20になり、他では+になるのですか?
%20はRFC 3986のスペースのパーセントエンコーディングで、URIパスセグメントやクエリ値に対して正しいです。スペースを表す+記号は、RFC 3986よりも前に存在したapplication/x-www-form-urlencoded(HTMLフォーム送信)に特有のものです。どちらもそれぞれの文脈では有効ですが、%20はHTMLフォーム以外では普遍的な標準です。
URLエンコーディングは非ASCII文字に対して機能しますか?

はい。非ASCII文字は最初にUTF-8バイトに変換され、その後各バイトが個別にパーセントエンコードされます。文字ş(U+015F)は%C5%9Fになります。中国語の文字中(U+4E2D)は%E4%B8%ADになります。現代のブラウザとサーバーは、URL内の非ASCII文字に対してUTF-8エンコーディングを期待しています。

このツールを使用する際に私のURLデータはサーバーに送信されますか?

いいえ。すべてのエンコーディングは、あなたのブラウザ内でローカルに実行されるencodeURI()またはencodeURIComponent()を使用します。あなたが貼り付けるURL、クエリパラメータ、認証トークン、その他のデータは、決して私たちのサーバーに送信されることはありません。