引き続きエンコード関連の関数を紹介します。今回は URI をエンコードするための関数です。
encodeURI() 関数と decodeURI() 関数
encodeURI() 関数 (livedocs@lab) は URI 文字列を UTF-8 値にエンコードします。英数字は変換の対象外ですが、他にも URI の一部として使われる記号は変換されません。
var str:String = "http://w.c/a?b+ま&";
trace(encodeURI(str)); // http://w.c/a?b+%E3%81%BE& が出力される
この例では「ま」だけが変換されていますが、/ 等の文字は変換されていませんね。
encodeURI() によって変換されない記号は以下のものがあります。上段は URI の区切り文字として使用される記号です。
; / ? : @ & = + $ , # - _ . ! ~ ' ( )
encodeURI() でエンコードされた文字列は decodeURI() 関数 (livedocs@lab) を使って元に戻すことができます。
var str:String = encodeURI("http://w.c/a?b+ま&");
trace(str); // http://w.c/a?b+%E3%81%BE& が出力される
trace(decodeURI(str)); // http://w.c/a?b+ま& が出力される
encodeURIComponent() 関数と decodeURIComponent() 関数
encodeURIComponent() 関数 (livedocs@lab) は encodeURI() とほぼ同じような関数ですが、encodeURI() が URI 全体をエンコードするためのものであるのに対し、encodeURIComponent() は URI コンポーネントと呼ばれる URI の一部分をエンコードするための関数です。
URI コンポーネントとは ":", "/", ";" 等の記号で区切られた文字列です。例えば http や www.adobe.com は URI コンポーネントです。
実際に encodeURI() と encodeURIComponent() でエンコードした結果を比べると以下のようになります。どこが違うか分かりますか?
var str:String = "http://w.c/a?b+ま&";
trace(encodeURI(str)); // http://w.c/a?b+%E3%81%BE& が出力される
trace(encodeURIComponent(str)); // http%3A%2F%2Fw.c%2Fa%3Fb%2B%E3%81%BE%26 が出力される
encodeURIComponent() では ":" や "/" もエンコードの対象になっています。これは encodeURIComponent() が URI の区切りに使われる記号を特別扱いしないからです。
英字と数字以外で encodeURIComponent() がエンコードしない文字は以下のとおりです。
- _ . ! ~ ' ( )
encodeURIComponent() でエンコードされた文字列は decodeURIComponent() 関数 (livedocs@lab) で元に戻します。
var str:String = encodeURIComponent("http://w.c/a?b+ま&");
trace(str); // http%3A%2F%2Fw.c%2Fa%3Fb%2B%E3%81%BE%26 が出力される
trace(decodeURIComponent(str)); // http://w.c/a?b+ま& が出力される
コメントする