PHP 5.4 RC1が公開されています。PHP 5.4のリリースが近いです。PHP 5.3の–enable-zend-multibyeの問題でバグレポートをした関係でinternals MLでメールのやり取りをして分った事とその他をまとめておきます。主にSJISを使う場合の注意点です。間違い・勘違いもあるかも知れないので気が付いたらコメントを下さい。
- PHP 5.4はデフォルトの内部エンコーディングがISO-8859-1になる
- SJISでコードを書く場合はzend.script_encoding=SJISを書く
- SJISでコードを書く場合は内部エンコーディングをSJIS(mbstring.internal_encoding=SJIS)に設定する
- SJISで出力する場合はmbstring.http_output=SJIS (output_handler=mb_output_handlerなどが必要)を設定する
- SJISでページを書いている場合、SJISが入力になるのでmbstring.http_input=SJISを設定する
- Zend Multibyteサポートがコンパイルオプションからランタイムオプション(zend.multibyte=On)になる
- Zend Multibyteサポートにはmbstringが必須
- mbstringがモジュールとしてビルドされている場合でもZend Multibyteサポートを有効にできる
- declare(encoding=…)でスクリプト中からスクリプトのエンコーディングが指定できる
php -c php.ini-development -d zend.multibyte=1 SJIS_script.phpとしてSJISが含まれるスクリプト(例えば、echo “表”)を実行するとSJISの文字が?に変換されてしまいます。正しく処理するには-d mbstring.internal_encoding=UTF-8などを追加し
php -c php.ini-development -d zend.multibyte=1 -d mbstring.internal_encoding=utf-8 SJIS_script.php
などとしなければなりません。
全般的にマルチバイト文字エンコーディングのサポートが改良されていますが、以前と多少異なる部分があるので注意が必要です。