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

CakePHP1.1でXML_Unserializerを使う際のエラー対処

PEARのXML_Unserializer.phpをレンタルサーバで利用する際、
Fatal error: Call to undefined method: xml_parser->sethandlerobj()
といったエラーが。

XML_PARSERをバージョンアップすれば解決するらしいが、
レンタルサーバなのでそれができない。

そこでCakePHPのapp/vendersにXML_PARSERを置き
ini_set( ‘include_path’, get_include_path() . PATH_SEPARATOR . APP .’vendors’ );
としたが、現状は変わらず。

理由は、CakePHPの
app/webroot/index.php
CakePHPのルートディレクトリ/index.php
でinclude_pathを指定しているため。

app/webroot/index.phpの
ini_set(‘include_path’, CAKE_CORE_INCLUDE_PATH . PATH_SEPARATOR . ROOT . DS . APP_DIR . DS . PATH_SEPARATOR . ini_get(‘include_path’));

ini_set(‘include_path’, CAKE_CORE_INCLUDE_PATH . PATH_SEPARATOR . ROOT . DS . APP_DIR . DS );
と修正。

CakePHPのルートディレクトリ/index.phpの
ini_set(‘include_path’, ini_get(‘include_path’) . PATH_SEPARATOR . CAKE_CORE_INCLUDE_PATH . PATH_SEPARATOR . ROOT . DS . APP_DIR . DS);

ini_set(‘include_path’, CAKE_CORE_INCLUDE_PATH . PATH_SEPARATOR . ROOT . DS . APP_DIR . DS);
と修正。

とすれば、デフォルトのinclude_pathを読み込まないため、問題が解決される。