JavaScriptのdecodeURIComponent()関数とは?構文と使い方をわかりやすく解説
decodeURIComponent()は、エンコード済みのURI(Uniform Resource Identifier)を表す文字列を引数として受け取り、それをデコードして結果を返すJavaScriptの組み込み関数です。主に、encodeURIComponent()によってエンコードされたURLやクエリ文字列を、元の読み取り可能な形式に戻したい場面で使用されます。
構文
基本的な構文は次のとおりです。
decodeURIComponent(encodedURI)
引数encodedURIには、encodeURIComponent()などでパーセントエンコードされた文字列を渡します。戻り値として、デコードされた元の文字列が返されます。
サンプルコード
以下の例では、まずencodeURIComponent()でキリル文字(шеллы)を含むURLをエンコードし、続いてdecodeURIComponent()で元の文字列に復元しています。
<html>
<head>
<title>JavaScript サンプル</title>
</head>
<body>
<script type='text/javascript'>
var encodedData = encodeURIComponent('https://www.qries.com/?x=шеллы');
document.write('Encoded Data: ' + encodedData);
document.write('<br>');
var decodedData = decodeURIComponent(encodedData);
document.write('Decoded Data: ' + decodedData);
</script>
</body>
</html>
実行結果
Encoded Data: http%3A%2F%2Fwww.qries.com%2F%3Fx%3D%D1%88%D0%B5%D0%BB%D0%BB%D1%8B Decoded Data: https://www.qries.com/?x=шеллы
このように、encodeURIComponent()で生成されたパーセントエンコード形式の文字列が、decodeURIComponent()によって日本語やキリル文字などを含む元のURIへと正しく復元されていることが確認できます。
decodeURIComponent()利用時の注意点
- URIErrorに注意: 引数に不正なパーセントエンコーディング(例:%が単独で現れる、エスケープシーケンスが途中で切れている等)が含まれる場合、URIError例外がスローされます。外部入力を扱う際はtry〜catchでの例外処理を推奨します。
- 対応するエンコード関数: encodeURIComponent()でエンコードした文字列は、必ずdecodeURIComponent()で復元するのが基本です。両者は対で使用する関数です。
- フォームデータとの違い: application/x-www-form-urlencoded形式では半角スペースが+として表現されるため、その場合は+を半角スペースに置き換えてからdecodeURIComponent()を適用する必要があります。
-
JavaScriptの関数プロトタイプとは?仕組みと使い方を解説
JavaScriptで作成されたすべての関数には、JavaScriptエンジンによって自動的にprototypeプロパティが追加されます。このprototypeプロパティはオブジェクトであり、デフォルトではconstructorプロパティを含んでいます。関数のプロトタイプには、以下のようにしてアクセスできます。functionName.prototypeコンストラクタ関数を使ってオブジェクトを生成する場合、このprototypeプロパティを活用することで、同じコンストラクタから作成された複数のオブジェクト間でメソッドやプロパティを効率的に共有することができます。これにより、各インスタンスごとに
-
JavaScriptでのメソッド借用:call()・apply()・bind()の使い方を解説
JavaScriptでは、call()、apply()、bind()という3つのメソッドを使うことで、あるオブジェクトが持つメソッドを別のオブジェクトが「借用」できます。これは、本来そのメソッドを持たないオブジェクトに対して、thisの参照先を差し替えてメソッドを実行できる便利なテクニックです。 3つのメソッドの違い call():引数をカンマ区切りで個別に渡し、即座に関数を実行します。 apply():引数を配列(または配列風オブジェクト)として渡し、即座に関数を実行します。 bind():thisを固定した新しい関数を返すだけで、即座には実行されません。返された関数は後から好きなタイミン