【JS応用|豆知識】URLを安全に扱うための鍵:encodeURI関数の正しい使い方

導入

Web開発において、ブラウザのアドレスバーやAPIリクエストのURLに日本語や特殊文字を含めたい場面は多々あります。しかし、URLには使える文字が制限されており、そのまま含めると予期せぬエラーや文字化けの原因になります。この課題を解決するのがJavaScriptの encodeURI です。適切に使うことで、安全で堅牢なWebアプリケーションを構築できるようになります。

基礎知識

URLには「予約文字」と呼ばれる、特定の意味を持つ文字(例えば ? や & や / など)が存在します。これらをそのままデータとしてURLに含めてしまうと、サーバー側は「これはデータの値なのか、それともクエリの区切りなのか」を判別できなくなります。
encodeURI は、URL全体をエンコード(符号化)して、ブラウザが正しく解釈できる「URLとして安全な文字列」に変換するための関数です。似た関数に encodeURIComponent がありますが、encodeURI は「URL全体を構築する」際に使用し、一部のURL予約文字(: / ? # など)は変換せずに保持するという特徴があります。

実装/解決策

encodeURI を使う際は、まずベースとなるURLと、動的に追加したいパラメータを切り分けます。パラメータ部分には必要に応じて encodeURIComponent を使い、URL全体を encodeURI で囲むことで、不正な文字が含まれていても安全なURLを作成できます。

サンプルプログラム

以下のコードは、検索キーワードをURLに含める際の標準的な実装例です。

// 検索キーワード(日本語やスペースが含まれる)
const keyword = "フロントエンド 豆知識";

// URLのベース部分
const baseUrl = "https://example.com/search?q=";

// 1. まずパラメータ部分だけを個別にエンコードする
const encodedKeyword = encodeURIComponent(keyword);

// 2. URL全体を構築し、encodeURIで保護する
// (既にエンコード済みのクエリが含まれるURL全体を安全な形に整えます)
const finalUrl = encodeURI(baseUrl + encodedKeyword);

// 結果を表示
console.log("生成されたURL:", finalUrl);
// 出力: https://example.com/search?q=%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89%20%E8%B1%86%E7%9F%A5%E8%AD%98

// ブラウザのAPIなどで直接URLを扱う際にこの finalUrl を使用します

応用・注意点

現場で最も陥りやすい罠は、encodeURI と encodeURIComponent の使い分けです。
encodeURI はURL全体を対象にしますが、クエリパラメータの「値」の中に ? や & が含まれている場合、encodeURI ではそれらが変換されず、URLの構造が壊れてしまうことがあります。

・URL全体を扱うなら:encodeURI
・URLのパラメータ部分(値)だけを扱うなら:encodeURIComponent

この使い分けを意識するだけで、URLに関する不具合の大部分を防ぐことができます。また、パスの一部に日本語が含まれる場合も、encodeURI を通すことで、サーバー側が正しく解釈できるエンコード形式(UTF-8)に変換されるため、ぜひ活用してください。

タイトルとURLをコピーしました