encodeURI()関数とencodeURIComponent()関数の違い

2024-04-05

JavaScriptでURLエンコードを行うには、主に以下の3つの方法があります。

encodeURI() 関数は、URL全体をエンコードします。

const url = "https://example.com/?param1=日本語&param2=漢字";
const encodedUrl = encodeURI(url);
console.log(encodedUrl); // "https://example.com/?param1=%E6%97%A5%E6%9C%AC%E8%AA%9E&param2=%E6%BC%A2%E5%AD%97"
const param1 = "日本語";
const encodedParam1 = encodeURIComponent(param1);
console.log(encodedParam1); // "%E6%97%A5%E6%9C%AC%E8%AA%9E"

URLSearchParams クラスは、URLのパラメータをエンコードする際に便利です。

const url = new URL("https://example.com/");
const params = new URLSearchParams();
params.append("param1", "日本語");
params.append("param2", "漢字");

const encodedUrl = url.toString() + "?" + params.toString();
console.log(encodedUrl); // "https://example.com/?param1=%E6%97%A5%E6%9C%AC%E8%AA%9E&param2=%E6%BC%A2%E5%AD%97"

注意点

  • エンコード後のURLは、デコードしないと人間が読みにくい形式になります。
  • エンコード後のURLは、ブラウザによって異なる結果になる場合があります。



JavaScriptでURLエンコードを行うサンプルコード

encodeURI() 関数

const url = "https://example.com/?param1=日本語&param2=漢字";
const encodedUrl = encodeURI(url);
console.log(encodedUrl); // "https://example.com/?param1=%E6%97%A5%E6%9C%AC%E8%AA%9E&param2=%E6%BC%A2%E5%AD%97"

encodeURIComponent() 関数

const param1 = "日本語";
const encodedParam1 = encodeURIComponent(param1);
console.log(encodedParam1); // "%E6%97%A5%E6%9C%AC%E8%AA%9E"

URLSearchParams クラス

const url = new URL("https://example.com/");
const params = new URLSearchParams();
params.append("param1", "日本語");
params.append("param2", "漢字");

const encodedUrl = url.toString() + "?" + params.toString();
console.log(encodedUrl); // "https://example.com/?param1=%E6%97%A5%E6%9C%AC%E8%AA%9E&param2=%E6%BC%A2%E5%AD%97"
  • デコードを行う場合は、decodeURI() 関数または decodeURIComponent() 関数を使用します。
const encodedUrl = "https://example.com/?param1=%E6%97%A5%E6%9C%AC%E8%AA%9E&param2=%E6%BC%A2%E5%AD%97";
const decodedUrl = decodeURI(encodedUrl);
console.log(decodedUrl); // "https://example.com/?param1=日本語&param2=漢字"
  • URLエンコードを行う必要があるのは、URLに特殊文字が含まれている場合のみです。
const url = "https://example.com/";
const encodedUrl = encodeURI(url);
console.log(encodedUrl); // "https://example.com/"
  • URLエンコードを行うと、URLが長くなる場合があります。
const url = "https://example.com/?param1=This is a very long string";
const encodedUrl = encodeURI(url);
console.log(encodedUrl); // "https://example.com/?param1=This%20is%20a%20very%20long%20string"
const url = "https://example.com/?param1=日本語";
const encodedUrl = encodeURI(url);
console.log(encodedUrl); // "https://example.com/?param1=%E6%97%A5%E6%9C%AC%E8%AA%9E"



JavaScriptでURLエンコードを行うその他の方法

URLエンコードを行うライブラリが多数存在します。これらのライブラリを使用することで、より簡単にURLエンコードを行うことができます。

自作の関数を使用する

URLエンコードを行う自作の関数を作成することもできます。

function encodeUrl(url) {
  // エンコードする文字列を定義
  const encodeChars = [
    " ",
    "!",
    "\"",
    "#",
    "$",
    "%",
    "&",
    "'",
    "(",
    ")",
    "*",
    "+",
    ",",
    "-",
    ".",
    "/",
    ":",
    ";",
    "<",
    "=",
    ">",
    "?",
    "@",
    "[",
    "\\",
    "]",
    "^",
    "_",
    "`",
    "{",
    "|",
    "}",
    "~",
  ];

  // URLをエンコード
  const encodedUrl = url.replace(/./g, (char) => {
    if (encodeChars.includes(char)) {
      return `%${char.charCodeAt(0).toString(16).toUpperCase()}`;
    } else {
      return char;
    }
  });

  return encodedUrl;
}

const url = "https://example.com/?param1=日本語&param2=漢字";
const encodedUrl = encodeUrl(url);
console.log(encodedUrl); // "https://example.com/?param1=%E6%97%A5%E6%9C%AC%E8%AA%9E&param2=%E6%BC%A2%E5%AD%97"

各方法の比較

方法メリットデメリット
URLエンコードライブラリ簡単ライブラリの読み込みが必要
自作の関数柔軟性が高い複雑なコードになる
URLエンコードツール簡単インターネット接続が必要
  • URLエンコードを行う際は、注意点に理解しておきましょう。

javascript url encode


【徹底解説】JavaScriptでHTMLを取得:document、documentElement、outerHTMLを使いこなす

document. documentElement. outerHTML プロパティを使用するこの方法は、最も簡潔でわかりやすい方法です。document. documentElement は、HTML ドキュメントのルート要素を表すオブジェクトであり、outerHTML プロパティは、その要素とすべての子要素を含む HTML コードを文字列として返します。...


【初心者向け】JavaScript、jQuery、HTMLで簡単にスクロールを無効化

そこで今回は、JavaScript、jQuery、HTML を駆使して、スクロールを無効化しつつもコンテンツを非表示にしない方法について、詳しく解説していきます。HTML レベルで最もシンプルな方法は、overflow プロパティを使用することです。このプロパティは、要素内のコンテンツがはみ出した際にどのように処理するかを制御します。...


Reactで安全にsetIntervalを使うためのuseEffectとカスタムフック

setInterval は、JavaScript で一定間隔で関数を繰り返し実行する関数です。React アプリケーションにおいても、カウントダウンタイマーやデータの定期的な更新など、様々な用途で setInterval を使用することができます。...


テストの壁を乗り越える:JavaScript、React.js、Webpack、Jest、および Webpack エイリアスを使用した包括的なガイド

概要Webpack は、コードをバンドルしてデプロイメントの準備を整えるためのモジュラービルドツールです。Jest は、JavaScript コードをテストするための軽量なテストフレームワークです。Webpack エイリアスは、長いまたは複雑なモジュールパスを短いエイリアスに置き換える一種のショートカットです。...


Nest.js でダイナミックインジェクションを使用して別モジュールからサービスを注入する方法

Nest. js で別モジュールからサービスを注入するには、いくつかの方法があります。ここでは、最も一般的な方法をいくつか紹介します。プロバイダーは、Nest. js においてサービスを登録および管理するための主要なメカニズムです。サービスを注入するには、まずそのサービスをプロバイダーとして登録する必要があります。これは、@Injectable() デコレータと @Inject() デコレータを使用して行うことができます。...