コンテンツにスキップ

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文字ずつ確認し、次のルールを適用します。

  1. 文字が上記の変更されない文字のいずれかであれば、そのまま保持します。
  2. それ以外の場合は、その文字をUTF-8のバイト列に変換します。西ヨーロッパのアクセント付き文字の多くは二バイト、中国語やアラビア語などの文字体系の文字は三バイトを使うことが多くあります。
  3. 各バイトを二桁の十六進数として書きます。
  4. 各十六進数の組の前に%を付けます。
  5. 結果を順番に連結して、エンコードされた文字列を作ります。

例

入力:Jürgen & Björk

一文字ずつ処理すると、次のようになります。

文字結果
JJ(そのまま)
ü%C3%BC(UTF-8バイト0xC3、0xBC)
rgenrgen(そのまま)
(スペース)%20
&%26
(スペース)%20
BjBj(そのまま)
ö%C3%B6(UTF-8バイト0xC3、0xB6)
rkrk(そのまま)

出力: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"
4

歴史

URLの中の安全でない文字をエンコードするという考え方は、URLの形式を最初に定義した文書の一つである、1994年のRFC 1738にさかのぼります。2005年に公開されたRFC 3986は規則を更新し、エンコードが不要な「非予約」文字の集合を正式に定義しました。このツールの土台であるJavaScriptの関数encodeURIComponentは、RFC 3986よりやや広い非予約文字の集合に従っており、! * ' ( )もエンコードしません。これはURI仕様の以前の版に合わせたものです。

よくある質問

URLエンコードとURLエスケープの違いは何ですか? 同じものです。どちらもパーセントエンコードを指す用語で、文字を%とそれに続く二桁の十六進数に置き換えます。

このツールでは、!、*、'、(、)が変更されないのはなぜですか? このツールはencodeURIComponentを使っており、これら5つの文字を安全な文字として扱い、入力されたとおりに残します。ただし、他のエンコード関数や一部のサーバーでは、これらの文字のエンコードが必要な場合があります。問題が起きる場合は、送信先のシステムを確認してください。

スペースを表す%20と+の違いは何ですか。 どちらもスペースを表します。%20は、スペースに対する一般的なパーセントエンコードです。+記号は、application/x-www-form-urlencodedデータの中だけで使われる特別な場合です。これはHTMLフォームの送信で使われる形式で、このツールでは使いません。

このツールは、すでにエンコードされたテキストをデコードしますか? いいえ。エンコードのみを行います。入力に%記号がすでに含まれている場合、その%はリテラル文字として扱われ、残されるのではなく、出力では%25になります。

中国語やアラビア語のテキストなど、ラテン文字以外の文字はどのように扱われますか。 各文字はまずUTF-8のバイト列に変換され、そのあと各バイトがパーセントエンコードされます。ほとんどの漢字は三バイトを使うため、漢字一文字から出力に三組の%XXができます。

URL全体をエンコードすべきですか、それとも一部だけですか? クエリ値やパスセグメントなど、ユーザーデータを保持する部分だけをエンコードします。https://やドメイン名など、URLの構造を形成する部分はエンコードしません。コンポーネント用エンコーダーでURL全体をエンコードすると、:、/、?もパーセントコードに変換され、アドレスが壊れてしまいます。

参考文献

  1. インターネット技術タスクフォース。RFC 3986: Uniform Resource Identifier (URI): Generic Syntax(2005年1月)。RFC 3986:「%」に二桁の十六進数を続けるパーセントエンコード。非予約文字 = ALPHA / DIGIT / "-" / "." / "_" / "~"。
  2. MDN Web Docs(Mozilla)。encodeURIComponent()。MDN、encodeURIComponent():A–Z a–z 0–9 - _ . ! ~ * ' ( ) を除くすべての文字をエスケープする。
  3. インターネット技術タスクフォース。RFC 1738: Uniform Resource Locators (URL)(1994年12月)。RFC 1738:「%」に二桁の十六進数を続ける符号化を定義した、初期のURL仕様。
  4. インターネット技術タスクフォース。RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax(1998年8月)。RFC 2396:以前の非予約文字の"mark"集合:- _ . ! ~ * ' ( )。
  5. WHATWG。URL Standard。WHATWG URL標準:application/x-www-form-urlencoded では、スペースを「+」で表す。