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, ']');
}

仕様

仕様 策定状況 コメント
ECMAScript 3rd Edition (ECMA-262) 標準 初期定義。
ECMAScript 5.1 (ECMA-262)
encodeURI の定義
標準  
ECMAScript 2015 (6th Edition, ECMA-262)
encodeURI の定義
標準  
ECMAScript Latest Draft (ECMA-262)
encodeURI の定義
現行の標準  

ブラウザ実装状況

機能 Chrome Firefox (Gecko) Internet Explorer Opera Safari
基本サポート (有) (有) (有) (有) (有)
機能 Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
基本サポート (有) (有) (有) (有) (有) (有)

関連情報

ドキュメントのタグと貢献者

タグ: 
 このページの貢献者: YuichiNukiyama, Marsf, dskmori, x2357, teoli, ethertank, Potappo
 最終更新者: YuichiNukiyama,