2008年5月11日日曜日

PHP5で変わること

PHP4→PHP5(正確には5.2.5) への移行で変わることのメモ:

■mb_sendmailで、件名が文字化ける

→ mb_sendmail は使わず、自前のメール送信用の関数を作成して解決


■php.iniのデフォルト値が変わる

・offになった↓
register_long_arrays =on に戻す必要あり。
→今後は、スーパーグローバル変数($GLOBALS,$_SERVER,$_GET,$_POST,$_FILES,$_COOKIE,$_SESSION,$_REQUEST,$_ENV)でコーディングすること!

・magic_quotes_gpc = On に戻す必要あり。

・今後は、<? ではなく、 <?php で書くこと。

・allow_url_include = On に戻す必要。無ければ書き足す必要あり。
・allow_url_fopen = On 要確認


■ date( "Y年m月d日" ,$hoge_day ) の表示がおかしい(「年」が文字化け)

http://blog.yoheis.net/2007/09/phpsjis-echo-dateymd-20070903-shift.html

→ str_replace ("★","年", date( "Y★m月d日" ,$hoge_day ) )
我流ですが、これでとりあえず不具合を回避。

→追記:date( "Y" ,$hoge_day ) ."年".date( "m月d日" ,$hoge_day ) の方がいいような気がしてきた。


■preg_replace で 日本語の許容が無くなった

(全般的に、日本語文字列のルールが厳格になった感がある)

http://ml.php.gr.jp/pipermail/php-users/2006-November/031190.html

> > 1のパターンでは日本語を置換できるのですが、2のパターン
> > のように、「ー」が入ると下記のようなエラーメッセージが出て
> > しまいます。この現象を解決したいのですが、どのようにコードを
> > 修正すればいいのでしょうか?どなたかアドバイスをお願いします。
> >
> > Warning: preg_replace(): Compilation failed: missing terminating ]
> > for character class at offset 8
> >
> > <?php
> > //1のパターン
> > $text = "彼は僕の友達です。";
> > $result = preg_replace("/彼/", "彼女", $text);
> > print $result."\n";
> >
> > //2のパターン
> > $text = "ミッキーは僕の友達です。";
> > $result = preg_replace("/ミッキー/", "ミニー", $text);
> > print $result."\n";
> > ?>
>
>
> > > のように、「ー」が入ると下記のようなエラーメッセージが出て
> > > しまいます。この現象を解決したいのですが、どのようにコードを
> > > 修正すればいいのでしょうか?どなたかアドバイスをお願いします。
> > >
> > > Warning: preg_replace(): Compilation failed: missing terminating ]
> > > for character class at offset 8
> >
> > 「ー」はシフトJISだと815Bになります。
> > 5Bは「[」になるので、そのためにterminateしてないよって
> > エラーになっているのでしょう。
> > シフトJISで文字を置換を行うなら、mb_ereg_replaceを使う方がいいと思います。
>
>
>


■古い関数名が、サポートされなくなった ← i18n_convert などを、mb_convert_encoding などに修正。

PHP_FALIAS(mbsubstr, mb_substr, NULL)
PHP_FALIAS(mbstrcut, mb_strcut, NULL)
PHP_FALIAS(i18n_internal_encoding, mb_internal_encoding, NULL)
PHP_FALIAS(i18n_http_input, mb_http_input, NULL)
PHP_FALIAS(i18n_http_output, mb_http_output, NULL)
PHP_FALIAS(i18n_convert, mb_convert_encoding, NULL)
PHP_FALIAS(i18n_discover_encoding, mb_detect_encoding, NULL)
PHP_FALIAS(i18n_mime_header_encode, mb_encode_mimeheader, NULL)
PHP_FALIAS(i18n_mime_header_decode, mb_decode_mimeheader, NULL)
PHP_FALIAS(i18n_ja_jp_hantozen, mb_convert_kana, NULL)


サーバー環境移転のため、
同時に、Apache1.3→2.2、MySQL4→5 のアップも行ったので
へろへろになりました。

0 件のコメント: