javascript の escape(), encodeURI(), encodeURIComponent() 関数群について、どの文字がエンコードされてどの文字がエンコードされないのか分かりにくいのでまとめておく。
まずは、対象範囲 %20(半角スペース)〜%7E(チルダ~)
元データ
!"#$%&'()*+,-./ 0123456789 :;<=>?@ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\]^_` abcdefghijklmnopqrstuvwxyz {|}~
escape()
%20%21%22%23%24%25%26%27%28%29*+%2C-./ 0123456789 %3A%3B%3C%3D%3E%3F@ ABCDEFGHIJKLMNOPQRSTUVWXYZ %5B%5C%5D%5E_%60 abcdefghijklmnopqrstuvwxyz %7B%7C%7D%7E%7F
encodeURI()
%20!%22#$%25&'()*+,-./ 0123456789 :;%3C=%3E?@ ABCDEFGHIJKLMNOPQRSTUVWXYZ %5B%5C%5D%5E_%60 abcdefghijklmnopqrstuvwxyz %7B%7C%7D~%7F
encodeURIComponent()
%20!%22%23%24%25%26'()*%2B%2C-.%2F 0123456789 %3A%3B%3C%3D%3E%3F%40 ABCDEFGHIJKLMNOPQRSTUVWXYZ %5B%5C%5D%5E_%60 abcdefghijklmnopqrstuvwxyz %7B%7C%7D~%7F
まとめ
- 全ての関数で[0-9A-Za-z]は変換されない。
- escape()で変換されない記号は *+-./@_ だけである。
- encodeURI()で変換されない記号は !#$'()*+,-./:;=?@_~ である。
- encodeURIComponent() が変換しない記号は !'()*-._~ のみである。
- マルチバイトなコードについては、たとえば、UTF-8の「あ」は escape() だと %u3042、encodeURL()およびencodeURIComponent() だと %E3%81%82。
おまけ。sourceに入力して encode ボタンを押すと 3つの関数それぞれでどのように変換されるか分かるツール。
ついでにunescape(), decodeURI(), decodeURIComponent() を使ってデコードするツールも置いておく。
Comments (3)
「PHPとJavaScriptのURIエンコードを比較」by JavaScript++かも日記
http://jsgt.org/ajax/ref/charset_test/responsetext/php/urlencode.php
はC/S間での文字列処理の参考になる。
from groundwalker | 2008年01月22日 09:14
2008年01月22日 09:14
検証リソース・ツール使わせていただきました。ありがとうございます。
コピペ厨な僕が、つづりミスのご報告をば。
encodeURICompoment→encodeURIComponent
from dsk | 2008年04月17日 23:17
2008年04月17日 23:17
dskさん、ご指摘どうもですー。修正しましたー。
from groundwalker | 2008年04月18日 10:06
2008年04月18日 10:06