JavaScript には文字列をエンコードするための関数が3つあるようだ。そして挙動は微妙に違う。
- escape
- encodeURI
- encodeURIComponent
それとよく使用される PHP にも同様に二種類関数が用意されている。
- urlencode
- rawurlencode
どれもエンコードするのに使えそうだが挙動が微妙に異なる。
JavaScript
window.escape
文字列をエンコードし、16 進エスケープシーケンスで表された特定の文字に置換します。
としか書かれていない。
この関数では 英数字と * + - . / @ _ 以外の文字をエスケープする。日本語はUTF-8であれば %u3042 のような値になる。
クッキーの値や GET/POST などの値を設定するのに使うようだ。
これをデコードするには window.unescape を使用する。
encodeURI
文字を UTF-8 エスケープシーケンスへ変換するための関数。
英数字と ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) # 以外の文字をエスケープする。日本語は %E3%81%82 のような値になる。
& や = などがエスケープされないのでこれだけでは URL そのものはエンコードできない。
デコードするには decodeURI を使用する。
encodeURIComponent
文字を UTF-8 エスケープシーケンスへ変換するための関数。
英数字と - _ . ! ~ * ' ( ) 以外の文字をエスケープする。日本語は encodeURI 同様 %E3%81%82 のような値になる。
URL で使用される文字群もエンコードしてくれる。
デコードするには decodeURIComponent を使用する。
PHP
urlencode
英数字と - _ . 以外の文字をエスケープし、スペースは + に変換される。
デコードは urldecode
rawurlencode
RFC 3986 で定められたエンコーディング方法
らしい
英数字と - _ . ~ 以外の文字をエスケープする。
デコードは rawurldecode
比較
変換しない記号群
関数 | 変換しない記号 | UTF-8 |
---|---|---|
js:escape | * + - . / @ _ | %u3042 |
js:encodeURI | ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) # | %E3%81%82 |
js:encodeURIComponent | - _ . ! ~ * ' ( ) | %E3%81%82 |
php:urlencode | - _ . (空白は + に) | %E3%81%82 | php:rawurlencode | - _ . ~ | %E3%81%82 |
コメント