URL エンコード
Highlightは、コードされたパーセンテージバイトです。
無料オンライン URL エンコード・デコードツール。encodeURIComponent / encodeURI / RFC 3986 の4つのエンコードモードに対応。エンコードされた文字をリアルタイムでハイライト表示、バッチモードで複数行処理、Query Only でパラメータ値のみエンコード。ブラウザローカル処理でデータはアップロードされません。
Highlightは、コードされたパーセンテージバイトです。
無料オンライン URL エンコード・デコードツール。encodeURIComponent / encodeURI / RFC 3986 の4つのエンコードモードに対応。エンコードされた文字をリアルタイムでハイライト表示、バッチモードで複数行処理、Query Only でパラメータ値のみエンコード。ブラウザローカル処理でデータはアップロードされません。
encodeURIComponent は &、=、? などを含むすべての非安全文字をエンコードするため、個々のパラメータ値のエンコードに適しています。encodeURI は URL の構造文字(:、/、?、# など)を保持するため、URL 全体のエンコードに適しています。使用場面:パラメータ値には Component、URL 全体には URI を使用してください。
RFC 3986 は URL 標準の改訂版で、チルダ ~ をエンコード不要な安全な文字として扱います。古い標準では %7E にエンコードされます。RFC 3986 を使用すると、一部のサーバー側での解析の違いを回避でき、互換性が向上します。
URL クエリ文字列 ?name=張三&city=北京 のような場合に、キー名や記号には影響を与えずパラメータ値のみをエンコードしたいときに使用します。この場合、name と city はそのままで、値は %E5%BC%A0%E4%B8%89 と %E5%8C%97%E4%BA%AC にエンコードされます。
application/x-www-form-urlencoded 形式(HTMLフォーム送信)では、スペースは + にエンコードされます。ただし、URL パスと encodeURIComponent では、スペースは常に %20 にエンコードされます。このツールではデフォルトで %20 形式を使用しています。
これは文字エンコード方式に依存します。このツールでは UTF-8 エンコード(Web標準)を使用しており、中国語の「中」は %E4%B8%AD にエンコードされます。他のツールが GBK エンコードを使用している場合、結果は %D6%D0 になります。Web URL では常に UTF-8 を使用することを推奨します。
%XX 形式にエンコードされた文字(例:スペース→%20)をハイライト表示し、エンコードルールの理解や問題のトラブルシューティングに役立ちます。英数字は安全な文字のためエンコードされず、中国語や特殊記号のみがエンコードされます。
はい。% は URL エンコードのエスケープ開始文字です。パラメータ値にリテラル % が含まれる場合は、%25 にエンコードする必要があります。そうしないと、エンコードされたバイトとして誤って解析されてしまいます。例えば 100% は 100%25 にエンコードする必要があります。
URL エンコード(パーセントエンコーディング)は、URL 内の非安全文字を %XX 形式に変換するプロセスです。URL には ASCII 文字のごく一部(英字、数字、-_.~)しか含めることができず、その他のすべての文字(中国語、スペース、特殊記号を含む)は URL 内で転送する前にエンコードする必要があります。例えばスペースは %20、中国語の「中」は %E4%B8%AD にエンコードされます。
**encodeURIComponent vs encodeURI**:これらは最もよく使用される2つのエンコード関数です。encodeURIComponent は &、=、? などのパラメータ区切り文字を含めて最も徹底的にエンコードするため、個々のパラメータ値のエンコードに適しています。encodeURI は URL の構造(プロトコル://、パス、/、?、#)を保持するため、URL 全体のエンコードに適しています。使い方を誤るとパラメータの解析エラーが発生します。
**RFC 3986 vs 古い標準**:RFC 3986 はチルダ ~ を安全な文字としてエンコードしませんが、初期の標準では %7E にエンコードされます。RFC 3986 を使用すると不要なエスケープが減り、URL の可読性が向上するとともに、一部のサーバーでの %7E の解析に関する問題も回避できます。
**Query Only モード**:URL 内のクエリパラメータの値のみをエンコードし、キー名や等号、& 記号には影響を与えたくない場合に使用します。例えば ?name=張三 は ?name=%E5%BC%A0%E4%B8%89 にエンコードされ、キー名は読みやすいまま値のみがエンコードされます。
**エンコードハイライト**:%XX 形式の文字をリアルタイムで琥珀色にハイライト表示し、どの文字がエンコードされたかが一目でわかります。これによりエンコードルールを理解しやすくなります:英数字は通常安全な文字のためエンコードされず、中国語や特殊記号のみがエンコードされます。すべての計算はブラウザローカルで行われ、データはアップロードされません。
| 文字 | 意味 | encodeURIComponent | encodeURI | RFC 3986 |
|---|---|---|---|---|
スペース | 空白 | %20 | %20 | %20 |
! | 感嘆符 | %21 | ! | %21 |
# | フラグメント識別子 | %23 | # | %23 |
$ | ドル記号 | %24 | $ | %24 |
& | パラメータ区切り | %26 | & | %26 |
' | シングルクォート | %27 | ' | %27 |
( | 左括弧 | %28 | ( | %28 |
) | 右括弧 | %29 | ) | %29 |
* | アスタリスク | %2A | * | %2A |
+ | プラス記号 | %2B | + | %2B |
, | カンマ | %2C | , | %2C |
/ | パス区切り | %2F | / | %2F |
: | コロン | %3A | : | %3A |
; | セミコロン | %3B | ; | %3B |
= | イコール記号 | %3D | = | %3D |
? | クエリ文字列 | %3F | ? | %3F |
@ | アットマーク | %40 | @ | %40 |
~ | チルダ | %7E | %7E | ~ |
| エンコード後 | 元の文字 | URL内での用途 |
|---|---|---|
%20 | (スペース) | 空白 |
%21 | ! | サブ区切り文字 |
%23 | # | フラグメント識別子(ハッシュ) |
%25 | % | エスケープ文字自体 |
%26 | & | クエリパラメータ区切り |
%2B | + | プラス記号/フォームの空白 |
%2F | / | パス区切り |
%3A | : | スキーム区切り |
%3D | = | キーと値の区切り |
%3F | ? | クエリ文字列の開始 |
%40 | @ | 認証/メール区切り |
%5B | [ | 配列パラメータ(RFC 3986) |
// encodeURIComponent:個々のパラメータ値をエンコード(最も一般的)
const param = encodeURIComponent('張三&李四');
console.log(param); // %E5%BC%A0%E4%B8%89%26%E6%9D%8E%E5%9B%9B
// encodeURI:URL全体をエンコード(:/?#&= などの構造文字を保持)
const url = encodeURI('https://example.com/search?q=こんにちは 世界');
console.log(url);
// デコード
const decoded = decodeURIComponent(param);
console.log(decoded); // 張三&李四
// RFC 3986 互換(~ はエンコードしない)
function rfc3986Encode(str) {
return encodeURIComponent(str).replace(/[!'()*]/g, c => '%' + c.charCodeAt(0).toString(16).toUpperCase());
}
// URLSearchParams API(モダンな方法、自動でエンコード処理)
const params = new URLSearchParams({ name: '張三', city: '北京' });
console.log(params.toString());
// name=%E5%BC%A0%E4%B8%89&city=%E5%8C%97%E4%BA%ACfrom urllib.parse import quote, unquote, urlencode, quote_plus
# quote: encodeURIComponent に類似
encoded = quote('張三&李四')
print(encoded) # %E5%BC%A0%E4%B8%89%26%E6%9D%8E%E5%9B%9B
# RFC 3986 モード(~ はエンコードしない、デフォルト)
print(quote('hello~world')) # hello~world
# quote_plus: 空白を + としてエンコード(フォーム形式)
print(quote_plus('hello world')) # hello+world
# デコード
print(unquote(encoded)) # 張三&李四
# urlencode: クエリ文字列を構築
params = urlencode({'name': '張三', 'city': '北京'})
print(params)
# name=%E5%BC%A0%E4%B8%89&city=%E5%8C%97%E4%BA%ACimport java.net.URLEncoder;
import java.net.URLDecoder;
import java.net.URI;
import java.nio.charset.StandardCharsets;
public class URLEncodeExample {
public static void main(String[] args) throws Exception {
// URLエンコード(URLEncoder はフォーム形式、空白は+になる)
String encoded = URLEncoder.encode("張三&李四", "UTF-8");
System.out.println(encoded);
// %E5%BC%A0%E4%B8%89%26%E6%9D%8E%E5%9B%9B
// デコード
String decoded = URLDecoder.decode(encoded, "UTF-8");
System.out.println(decoded); // 張三&李四
// URL全体を構築(URIクラスが自動でエンコード処理)
URI uri = new URI("https", "example.com", "/search", "q=こんにちは世界", null);
System.out.println(uri.toASCIIString());
}
}