URLパーセントエンコーダ・デコーダ
hello world & caféはhello%20world%20%26%20caf%C3%A9になり、そのままリンクに使えます。& = ? /も変換する1つの値向けと、コロンやスラッシュ、疑問符を残すアドレス全体向けを選べます。戻す操作で元に戻ります。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- テキスト
- hello world & café
- 計算モード
- Encode
- 結果
- hello%20world%20%26%20caf%C3%A9
- 長さ
- 31
- プロファイル
- component
- 規格
- encodeURIComponent / decodeURIComponent
encodeモードはプロファイルが要求する文字をエスケープし、decodeモードはプレーンテキストを復元します。単一のパラメータ値をエンコードする場合はcomponentモードを、コロン・スラッシュや疑問符のような構造上の区切りをそのまま残す必要がある場合はfull-URIモードをお選びください。
パーセントエンコーディングと二つのURLプロファイルの仕組み
パーセントエンコーディングは、ブラウザとRFC 3986が従うURI規格でウェブ向けに定義されており、ある文脈で許可されない各バイトをパーセント記号と二桁の十六進数に置き換えます。UTF-8テキストでは、マルチバイト文字が連続する複数の%HHグループになるため、caféはcaf%C3%A9に、単純な空白は%20になります。
日常業務では二つの一般的なプロファイルが重要です。componentプロファイルはencodeURIComponentに一致し、アンパサンド、等号、疑問符、スラッシュ、コロンのような予約区切りを含め、非予約文字以外のほぼすべてをエスケープします。
文字列が単一のクエリパラメータ値、または構造と誤認されてはならない単一のパスセグメントである場合に必要なものです。full-URIプロファイルはencodeURIに一致し、空白と非ASCIIは依然としてエスケープしますが、構造上の句読点はそのまま残すため、https://example.com/path?デコードはこの対応付けを逆に行います。
ホスト側のデコードが走る前に、この機能は入力を走査して整形式のエスケープを確認します。すべてのパーセント記号の後には、ちょうど二桁の十六進数が続かなければなりません。黙って受け入れれば貼り付けミスが隠れ、壊れたエスケープの扱いが言語間で食い違って異なる結果が生まれます。
送信する内容と返ってくる内容
mode encodeは選択されたプロファイルに従ってtextをパーセントエスケープし、変換後の文字列をresultに返します。mode decodeはすべてのパーセント列を検証してからエンコーディングを逆に戻し、プレーンなUTF-8テキストをresultに返します。componentは厳密なcomponentプロファイルの既定値trueです。
構造上の区切りを保持するfull-URIプロファイルにはfalseを設定してください。
応答は、mode、component、元のtext、result、resultのlength、componentまたはuriの短いprofileラベル、対応するJavaScript組み込み関数を明示するstandardラベルを返すため、クライアントはどの契約に当たったかを検証できます。検証失敗はプリペイド残高を消費しません。
定番の確認としては、componentモードで空白とアンパサンドを含むhello worldをエンコードすること、caf%C3%A9をcaféにデコードすること、componentをfalseにして完全なURLをエンコードしてスキームとクエリ区切りが残ることを確かめること、裸のパーセントで終わる文字列を拒否することが挙げられます。
実務でURLパーセントエンコーディングが登場する場面
自由入力ボックスから検索やフィルタのリンクを構築するフロントエンドアプリは、パステンプレートに手を触れずに、すべての値にcomponentエンコーディングを適用する必要があります。
ユーザー名、キャンペーンタグ、Unicodeの件名を含むディープリンクを埋め込むメールやSMSのテンプレートは、キャリアやクライアントがhrefを折り返したり破損したりしないよう、パーセントエンコーディングに依存しています。
サポートチームは、チケットから半分エンコードされた文字列を貼り付け、文字をでっち上げるのではなく、切り詰められた%エスケープで明確に失敗するデコード経路を必要とします。ローカライズ技術者は、マルチバイト言語が文字化けなしにエンコードとデコードを往復することを検証します。
ウェブ基礎を教える教材作者は、検索意図と予約文字の規則が異なるため、汎用のBase64やslugツールの下に話題を埋もれさせるのではなく、componentとfull-URI両プロファイルを備えたパーセントエンコーディング専用のページを一つ求めています。
Base64、Base32、slug生成、UTM組み立て、完全なURL構造検証が必要な場合は、このパーセントエンコーダページに過負荷をかけるのではなく、別の検索意図とランディングとして扱ってください。
活用例
安全なクエリパラメータ値
各フィルタ、検索語、製品名をcomponentモードでパーセントエンコードし、予約文字がクエリ文字列を分断・書き換えないようにします。
貼り付け・記録されたURLのデコード
ログやチケットのパーセントエンコード断片を読み取り可能なテキストにデコードし、不完全または十六進でないパーセント列では確実に失敗させます。
完全なURLの軽い正規化
componentをfalseにしてアドレス全体をエンコードし、空白と非ASCIIをエスケープしつつ、スキーム、パス、クエリの区切りをそのまま保ちます。
よくある質問
componentのtrueとfalseの違いは何ですか?
trueはencodeURIComponentの意味論を使い、& = ?/ :のような予約区切りをエスケープするため、単一の値がパラメータやパスセグメント内で安全になります。falseはencodeURIの意味論を使い、空白と非ASCIIをエスケープしつつ、構造上のURL句読点を保持します。
エンコードとデコードの両方ができますか?
はい。 modeをencode(既定)にするとプレーンテキストをパーセントエスケープし、modeをdecodeにするとパーセントエンコードされた文字列からテキストを復元します。
これは完全なURLオブジェクトの構築に代わるものですか?
いいえ。 これはパーセントエンコーディングの規則でテキストを変換するだけです。スキーム、ホスト、パス、クエリはご自身で組み立て、必要に応じてcomponentプロファイルで各値をエンコードしてください。
料金はいくらですか?
ブラウザツールは無料でローカルに動作します。無効な入力は課金されません。
%の並びが壊れているとどうなりますか?
戻す処理は止まり、問題の位置を示した分かりやすいメッセージが出ます。末尾にある単独の%や、%G1、%2のような並びは中途半端に戻さずに受け付けないので、貼り付けの誤りが別の文字になることはありません。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/enc/url \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"hello world & café"}'const res = await fetch("https://api.kit.forhosting.com/enc/url", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "hello world & café"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/url",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "hello world & café"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/url", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"hello world & café"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"hello world & café"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/url", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"text": "hello world & café"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.url",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
URLのパーセントエンコーディングは、空白、アンパサンド、非ASCII文字、その他の予約文字や安全でない文字を、移植性のある%HH形式に変換し、クエリ文字列、パスセグメント、コールバックパラメータがブラウザ、プロキシ、APIの通過に耐えられるようにします。これがなければ、空白を含む検索語はクエリを分断し、アクセント付きのメール件名はmailtoリンクを破損させ、スラッシュ入りの製品名は新しいパスのように見えてしまいます。この機能は、JavaScriptがencodeURIComponentとencodeURIとして公開しているのと同じ規則を適用します。不正なパーセント列は、半分だけデコードされたごみを返すのではなく、直ちにinvalid_inputで失敗します。
パーセントエンコーディングと二つのURLプロファイルの仕組み
x=1のようなアドレス全体を、スキーム、パス、クエリの骨格を壊さずに軽く正規化できます。末尾の孤立したパーセント、あるいは%G1や%2のような列は、位置と短い説明を添えてinvalid_inputを発生させます。この厳密なチェックは意図的なものです。処理経路はネットワーク、乱数シード、時計のタイムスタンプを伴わない純粋な文字列処理であるため、同一の入力は常に同一のJSONを生成します。成功したAPI呼び出しの料金は公開の基本額1件$0.002で、検証失敗はプリペイド残高を消費しません。
送信する内容と返ってくる内容
必須の文字列フィールドtextと、任意のmodeおよびcomponentフィールドを送信してください。modeを省略した場合、encodeが既定となるため、単一のペイロードでも有用な処理が行われます。textの欠落、文字列でないオブジェクト、未対応のmode値、componentに対して真偽値として解釈できない値、文書化された上限を超える文字列、不完全なパーセントエスケープ、パーセント記号の後の十六進でない数字、無効なデコード後UTF-8に対するホスト側のURIエラーは、いずれもinvalid_inputと明確な英語メッセージとともに失敗します。成功したAPI料金は公開の基本額1件$0.002です。
実務でURLパーセントエンコーディングが登場する場面
リダイレクト先、OAuthのコールバックURL、署名付きの戻りパスを組み立てるバックエンドサービスは、製品タイトル内のアンパサンドが二つ目のクエリフィールドをでっち上げないよう、各パラメータ値を独立してエンコードしなければなりません。この機能は純粋なparseエンジンであるため、API料金は成功item1件につき公開の基本額$0.002で、検証失敗は残高を消費しません。
技術的な質問
パーセント列が不正な場合はどうなりますか?
デコードはinvalid_inputで失敗し、位置と不正なエスケープ(例:不完全な%や十六進でない数字)を明示します。検証失敗には一切課金されません。