encodeURI()

この記事は技術レビューを必要としています。ぜひご協力ください

この記事は編集レビューを必要としています。ぜひご協力ください

encodeURI() 関数は、特定の文字をそれぞれ UTF-8 符号化で表現した 1 個から 4 個のエスケープシーケンス(サロゲートペア文字の場合にのみ 4 個のエスケープシーケンスとなる)に置き換えることで、URI(Uniform Resource Identifier、統一資源識別子)をエンコードします。

構文

 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) Standard 初期定義。
ECMAScript 5.1 (ECMA-262)
The definition of 'encodeURI' in that specification.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'encodeURI' in that specification.
Standard  

ブラウザ実装状況

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

関連情報

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

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