encodeURI()
関数は、URI (Uniform Resource Identifier; 統一資源識別子) をエンコードし、各文字のインスタンスをそれぞれ UTF-8 符号の文字を表す 1 個から 4 個のエスケープシーケンスに置き換えます (サロゲート文字のペアのみ 4 個のエスケープシーケンスになります)。
構文
encodeURI(URI)
引数
URI
- 完全な URI。
戻り値
特定の文字がエスケープされた新しい文字列。
説明
完全な URI を想定しているため、URI において特別な意味を持つ予約文字はエンコードされません。
encodeURI
は、以下を除くすべての文字を適切な UTF-8 エスケープシーケンスに置き換えます。
種類 | 含まれる文字 |
予約文字 | ; , / ? : @ & = + $ |
エスケープされない文字 | アルファベット、数字、- _ . ! ~ * ' ( ) |
ナンバー記号 | # |
encodeURI
自体は、XMLHTTPRequest などといった適切な HTTP GET 及び POST リクエストを作成できないことに注意してください。なぜなら encodeURI
では、GET 及び POST リクエストにおいて特殊文字として扱われる "&"、 "+"、 "=" がエンコードされないからです。ただし、encodeURIComponent
はこれらの文字をエンコードします。
サロゲートペアになっていない 1 個のサロゲート文字をエンコードしようとすると URIError
が発生することに注意してください。例えば、
// サロゲートペアは OK console.log(encodeURI('\uD800\uDFFF')); // 上位サロゲートのみだと "URIError: malformed URI sequence" エラーが発生 console.log(encodeURI('\uD800')); // 下位サロゲートのみだと "URIError: malformed URI sequence" エラーが発生 console.log(encodeURI('\uDFFF'));
また、URL 記述のための最近の RFC3986 仕様に従いたい場合、角括弧 []
は (IPv6 用の) 予約文字となっているため、角括弧が (ホスト名など) URL の一部を形成している場合はエンコードされていないほうがよいでしょう。そういう場合は以下のコードが役に立ちます:
function fixedEncodeURI (str) { return encodeURI(str).replace(/%5B/g, '[').replace(/%5D/g, ']'); }
仕様
ブラウザ実装状況
機能 | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
基本サポート | (有) | (有) | (有) | (有) | (有) |
機能 | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
基本サポート | (有) | (有) | (有) | (有) | (有) | (有) |