URLエンコーダー:オンラインで無料に特殊文字をエスケープ
URLで使用する特殊文字をパーセントエンコード形式に変換する無料ツール。スペース、記号、日本語などのUnicode文字を%XXという形式に変換し、JavaScriptのencodeURIComponent関数と同じ規則を用いる。API連携やWebフォーム、国際化されたURLの作成に役立つ。
URLエスケープ文字列変換
ドキュメンテーション
URLエンコード:その概要と仕組み
URLエンコード(パーセントエンコードとも呼ばれます)は、安全なASCII文字の小さな集合だけを使って、ウェブアドレス内の文字を表す方法です。安全でない文字を、%記号とそれに続く二桁の十六進数に置き換えて処理します。このURL文字列エスケーパーは、JavaScript組み込みのencodeURIComponent関数と同じ方法でテキストをエンコードします。
URLにエンコードが必要な理由
URLに含められる文字は、文字、数字、および少数の句読点に限られています。スペース、アクセント付き文字、ラテン文字以外のアルファベットの文字、&や=などの記号がエンコードされずに含まれていると、URLが壊れたり意味が変わったりすることがあります。たとえば、リンク内のスペースが原因で、ブラウザーやサーバーがURLを2つの別々の部分として読み取ることがあります。パーセントエンコードは、これらの文字をすべてのブラウザーとサーバーが同じように読み取れるコードに置き換えます。
このツールで変更されない文字
このツールは、次の文字には一切手を加えません。文字はそのまま通過します。
- 大文字と小文字:
A~Z、a~z - 数字:
0~9 - 句読点
-._~!*'()
それ以外のすべての文字は、次のようにパーセントエンコードされます。
- スペース文字、および
:/?#[]@$&+,;=などの句読点 - アクセント付き文字、およびその他の非ASCII文字やUnicode文字
%文字そのもの。これは、すでにパーセントエンコードされた文字列の一部であっても、必ず%25になります。
URL構文に関する一般的なガイドの中には、! * ' ( )を、状況によっては「エンコードが必要になる可能性がある」文字として、他の句読点と同じグループに分類するものがあります。この特定のツールは、これらを安全な文字として扱うencodeURIComponentのルールセットに従うため、エンコードしません。
パーセントエンコードされた文字列の計算方法(数式)
このツールは入力の各文字を1文字ずつ確認し、次のルールを適用します。
- 文字が上記の変更されない文字のいずれかであれば、そのまま保持します。
- それ以外の場合は、その文字をUTF-8バイト列に変換します。アクセント付きラテン文字、ギリシャ文字、キリル文字、アラビア文字は2バイトを使います。中国語、日本語、韓国語の文字は3バイトを使います。絵文字は4バイトを使います。
- 各バイトを二桁の十六進数として書きます。
- 各十六進数の組の前に
%を付けます。 - 結果を順番に連結して、エンコードされた文字列を作ります。
計算例
入力:Jürgen & Björk
一文字ずつ処理すると、次のようになります。
| 文字 | 結果 |
|---|---|
J | J(変更なし) |
ü | %C3%BC(UTF-8バイト0xC3、0xBC) |
rgen | rgen(変更なし) |
(スペース) | %20 |
& | %26 |
(スペース) | %20 |
Bj | Bj(変更なし) |
ö | %C3%B6(UTF-8バイト0xC3、0xB6) |
rk | rk(変更なし) |
出力:J%C3%BCrgen%20%26%20Bj%C3%B6rk
2つ目の例では、変更されない文字の集合がどのように機能するかを示します。文字列-_.!~*'()をエンコードすると、-_.!~*'()になります。すべての文字が非予約文字の集合に属するため、テキストは完全に同じです。文字列100%をエンコードすると100%25になります。%記号自体は安全な文字ではないためです。
パーセントエンコードされた文字列のデコード
デコードはこの処理を逆に行います。各%XXシーケンスを十六進数のバイトとして読み取り、バイトを元のUTF-8文字にまとめ直して、その文字でシーケンスを置き換えます。たとえば、%C3%BCはüに戻り、%20はスペースに戻ります。このツールはエンコードのみを行うため、処理を逆にするには別のデコーダーが必要です。
主な用途
パーセントエンコードは、プログラマーが記述したテキストではなく、人が入力したテキストをURLの一部にする必要がある場合に使われます。
- 検索語をアドレスバーに入れる検索ボックス。例:
?q=shoes%20%26%20bags - 名前、住所、その他のユーザーデータを運ぶクエリパラメーター
- アクセント付き文字やラテン文字以外の文字体系を使う言語のタイトルを持つページへのリンク
- トークンや識別子をURLの一部として渡すAPIリクエスト
コード例
1// JavaScript
2encodeURIComponent("Jürgen & Björk");
3// "J%C3%BCrgen%20%26%20Bj%C3%B6rk"
41# Python
2import urllib.parse
3urllib.parse.quote("Jürgen & Björk", safe="!*'()")
4# 'J%C3%BCrgen%20%26%20Bj%C3%B6rk'
5Pythonのquoteは、文字、数字、および- . _ ~を常にそのまま残します。このツールと一致させるには、追加の5
文字! * ' ( )をsafeに指定する必要があります。指定しない場合、quoteは代わりに%21 %2A %27 %28 %29を返します。
歴史
URL内の安全でない文字をエンコードする考え方は、 (4,410 cm)1994年のRFC1738にまでさかのぼります。RFC3986は2005年に公開され、規則を更新するとともに、エンコードが不要な「非予約」文字の集合を正式に定義しました。このツールの基盤であるJavaScript関数encodeURIComponentは、RFC3986よりやや広い非予約文字の集合に従います。つまり、! * ' ( )も、URI仕様の以前の版に合わせてエンコードせずに残します。
よくある質問
URLエンコードとURLエスケープの違いは何ですか?
同じものです。どちらもパーセントエンコードを指す用語で、文字を%とそれに続く二桁の十六進数に置き換えます。
このツールでは、!、*、'、(、)が変更されないのはなぜですか?
このツールはencodeURIComponentを使っており、これら5つの文字を安全な文字として扱い、入力されたとおりに残します。ただし、他のエンコード関数や一部のサーバーでは、これらの文字のエンコードが必要な場合があります。問題が起きる場合は、送信先のシステムを確認してください。
スペースにおける%20と+の違いは何ですか?
どちらもスペースを表します。%20はスペースに対する一般的なパーセントエンコードです。+記号は、HTMLフォームの送信に使われる形式であるapplication/x-www-form-urlencodedデータの内部でのみ使われる特殊な表記であり、このツールでは使われません。
このツールは、すでにエンコードされたテキストをデコードしますか?
いいえ。エンコードのみを行います。入力に%記号がすでに含まれている場合、その%はリテラル文字として扱われ、残されるのではなく、出力では%25になります。
中国語やアラビア語のテキストなど、ラテン文字以外の文字はどのように処理されますか?
各文字をまずUTF-8バイト列に変換し、その後、すべてのバイトをパーセントエンコードします。中国語の文字は3バイトを使うため、%XXのグループを3つ生成します。アラビア文字は2バイトを使うため、2つ生成します。
このツールがテキストのエンコードを拒否するのはどのような場合ですか? サロゲートペアの片方だけがテキストに含まれている場合に限ります。サロゲートペアとは、絵文字など、U+FFFFを超える文字を格納する2つの部分からなるコードです。片方だけでは有効なUTF-8形式にならないため、ツールは結果の代わりにエラーを表示します。通常の入力でこの状態になることはなく、切り詰められたコピーや壊れたリンクから生じるのが一般的です。
URL全体をエンコードすべきですか、それとも一部だけですか?
クエリ値やパスセグメントなど、ユーザーデータを保持する部分だけをエンコードします。https://やドメイン名など、URLの構造を形成する部分はエンコードしません。コンポーネント用エンコーダーでURL全体をエンコードすると、:、/、?もパーセントコードに変換され、アドレスが壊れてしまいます。