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

・urlencode()
○半角チルダ(~)を%7Eに変換する
○半角スペースをプラス(+)に変換する
・rawurlencode()
○半角チルダ(~)の変換についてはPHPのバージョンによって違う
PHP 5.2.xまでは、%7Eに変換する
PHP 5.3.0からは、%7Eに変換しない(チルダのまま)
○半角スペースを%20に変換する

rawurlencode()はRFC1738に沿った変換とされているので、
基本的にはurlencode()よりrawurlencode()の方が無難。
ただし、RFC1738ではチルダを%7Eに変換しません。

RFC1738はその後、RFC3986によって更新されているが、
RFC3986はパッと見た感じではURLエンコードについては
(JavaScriptのencodeURIComponent()で使われるRFC2396の方ではなく、)
RFC1738を踏襲しているようだ。
Amazonの新しいAPIでも、RFC3986によるURLエンコードを使っている。

参考:

PHPの URLエンコード (urlencode, rawurlencode)半角スペース、チルダhttp://blogs.yahoo.co.jp/doityourselfa/21028824.html

URIに使ってよい文字の話 – RFC2396 と RFC3986 – Text::Easyhacking
http://d.hatena.ne.jp/keisukefukuda/20080321/p1

PHPの URLエンコード (urlencode, rawurlencode, http_build_query)
http://fdays.blogspot.com/2009/07/php-url-urlencode-rawurlencode.html