JavaScript/decodeURIComponent
表示
decodeURIComponent()
は、エンコードされたURIコンポーネントを元のフォーマットに戻すグローバル関数です。主にクエリパラメータや特定のURI部分をデコードするために使用されます。
構文
[編集]decodeURIComponent(encodedURIComponent)
パラメータ
[編集]encodedURIComponent
- デコードするエンコードされたURIコンポーネント文字列
戻り値
[編集]- デコードされた元の文字列
例外
[編集]URIError
- 不正にエンコードされた文字が含まれている場合にスローされます
基本的な使用例
[編集]// エンコードされたクエリパラメータ const encodedParam = "%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%20%E4%B8%96%E7%95%8C!"; // デコード const decodedParam = decodeURIComponent(encodedParam); console.log(decodedParam); // "こんにちは 世界!"
エンコード vs デコード
[編集]メソッド | 目的 | エンコード/デコード範囲 |
---|---|---|
encodeURIComponent() |
URIコンポーネントをエンコード | 予約文字、特殊文字、非ASCII文字 |
decodeURIComponent() |
エンコードされたコンポーネントをデコード | エンコードされたすべての文字 |
デコード対象の文字
[編集]decodeURIComponent()
は以下を含むすべてのエンコードされた文字をデコードします:
- パーセントエンコーディングされた文字
- 16進数エンコーディング
- 非ASCII文字のUTF-8エンコーディング
- スペースや特殊文字
重要な特徴
[編集]- クエリパラメータの完全デコード
- セキュリティに関する注意が必要
- URLの各コンポーネントを正確に復元
高度な使用例
[編集]// URLからクエリパラメータを解析 function parseQueryString(url) { const queryString = url.split('?')[1]; const params = {}; queryString.split('&').forEach(param => { const [key, value] = param.split('='); params[decodeURIComponent(key)] = decodeURIComponent(value); }); return params; } const url = "https://example.com/search?q=%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0&lang=%E6%97%A5%E6%9C%AC%E8%AA%9E"; const parsedParams = parseQueryString(url); console.log(parsedParams); // { q: "プログラミング", lang: "日本語" }
セキュリティ考慮事項
[編集]- 信頼できないソースからのデコードには注意
- 追加のサニタイズが必要
- XSS (クロスサイトスクリプティング) 対策として不十分
注意点
[編集]- 不正なエンコード文字列は
URIError
を発生 - パフォーマンスへの影響は最小限
- 可読性を目的とした使用
エラーハンドリングの例
[編集]try { // 不正なエンコード文字列 const badEncoding = "%E0%A4%"; // 不完全なエンコーディング const decoded = decodeURIComponent(badEncoding); } catch (error) { if (error instanceof URIError) { console.error("デコード中にエラーが発生しました"); } }
関連メソッド
[編集]ブラウザ互換性
[編集]- すべてのモダンブラウザでサポート
- Internet Explorer 5.5以降
- ECMAScript 3以降で標準化
仕様
[編集]- ECMAScript 仕様
- WHATWG URL 仕様
- RFC 3986 (URI規格)