--- title: "URLエンコードとは|日本語・特殊文字の変換方法とデコードの仕組み" description: "URLエンコード(パーセントエンコーディング)の仕組みと使い方を解説します。日本語URLの変換方法、JavaScriptでのencodeURIComponentの使い方、よくある文字化けの原因と対処法もまとめました。" date: 2026-05-31 tags: [URLエンコード, Web制作, JavaScript] related_tools: [url-encode] draft: false --- URLには使用できる文字に制限があります。日本語・スペース・記号などを含む場合は**URLエンコード**(パーセントエンコーディング)と呼ばれる変換が必要です。Webサービス開発やAPIの利用時に必須の知識です。 ## URLエンコードとは URLで使える文字は英数字と一部の記号(`-` `_` `.` `~`)のみです。それ以外の文字は `%` と16進数2桁に変換されます。 ``` スペース → %20 日本語「東京」→ %E6%9D%B1%E4%BA%AC ? → %3F & → %26 = → %3D + → %2B # → %23 ``` ## 変換の仕組み 文字をUTF-8バイト列に変換し、各バイトを `%XX` 形式で表記します。 ``` 「東」のUTF-8: E6 9D B1 エンコード後: %E6%9D%B1 ``` ## JavaScriptでのエンコード・デコード JavaScriptには用途の異なる3つの関数があります。 ### encodeURIComponent — パラメータの値に使う URLのクエリパラメータの**値**をエンコードする際に使います。`&` や `=` もエンコードするため、値として安全に扱えます。 ```javascript const keyword = '東京 渋谷'; const url = `https://example.com/search?q=${encodeURIComponent(keyword)}`; // → https://example.com/search?q=%E6%9D%B1%E4%BA%AC%20%E6%B8%8B%E8%B0%B7 ``` ### encodeURI — URL全体に使う `&` `=` `?` `#` などURLの構造を示す記号はエンコードしません。URL全体を安全な形に変換する際に使います。 ```javascript const url = encodeURI('https://example.com/search?q=東京'); // → https://example.com/search?q=%E6%9D%B1%E4%BA%AC ``` ### decodeURIComponent — デコードに使う エンコードされた文字列を元に戻します。 ```javascript decodeURIComponent('%E6%9D%B1%E4%BA%AC'); // → 東京 ``` ### 使い分けの基準 | 用途 | 使う関数 | |---|---| | クエリパラメータの**値** | `encodeURIComponent` | | URL全体を扱う | `encodeURI` | | エンコードを戻す | `decodeURIComponent` | ## PHPでのエンコード・デコード ```php // エンコード urlencode('東京 渋谷'); // → %E6%9D%B1%E4%BA%AC+%E6%B8%8B%E8%B0%B7(スペースは+になる) rawurlencode('東京 渋谷'); // → %E6%9D%B1%E4%BA%AC%20%E6%B8%8B%E8%B0%B7(スペースは%20になる) // デコード urldecode('%E6%9D%B1%E4%BA%AC'); // → 東京 ``` `urlencode` はスペースを `+` に変換します。APIのクエリパラメータには `rawurlencode`(スペースを `%20` に)を使うのが安全です。 ## よくある文字化けの原因 ### フォームの文字コードが合っていない HTMLフォームが `UTF-8` で、サーバー側が `EUC-JP` で処理している場合に文字化けが発生します。現在はすべて `UTF-8` に統一するのが標準です。 ```html