Javascript と PHP の URLエンコード について

シェアする

JavaScript には文字列をエンコードするための関数が3つあるようだ。そして挙動は微妙に違う。

  • escape
  • encodeURI
  • encodeURIComponent

それとよく使用される PHP にも同様に二種類関数が用意されている。

  • urlencode
  • rawurlencode

どれもエンコードするのに使えそうだが挙動が微妙に異なる。

Sponsored Links

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

変換できるページ作ってみた

Sponsored Link

シェアする

フォローする