[PHP-users 33530] php-4.3.2でDBの日付スタンプに漢字が混ざる
tatsuya matsuyama
tatsuya @ kk-okamoto.jp
2008年 5月 13日 (火) 10:09:51 JST
松山と申します。
RedHat7.3J+国際化版php-4.2.3-multibyteで動作していたコンテンツを
RedHatLinuxES+php4.3.2へ移植中です。
Windows2003server+SQLserver2000へアクセスするコンテンツをテストしています。
SQLserverから取得したタイムスタンプ
$input_day[$i] = $data->input_day;
などを
// 受付日の整形
unset($tmp_year);
$tmp_year = (1*date("Y",strtotime($input_day[$i],"")))-1988; // 平成処理
$tmp_youbi = ask_youbi(date("w",strtotime($input_day[$i],"")));
$input_day[$i] = date("n/j/",strtotime($input_day[$i],""));
$input_day[$i] = "H".$tmp_year."/".$input_day[$i]."($tmp_youbi)";
のコードを通すと国際化版php-4.2.3とは違う表示になります。
原因を探ったところ、
strtotime($input_day[$i],"")が-1を戻しており、
print mb_convert_encoding($input_day[$i], "sjis", "euc")とすると
"5月 13 2008 08:00午前"が入っていました。
# 何故か「日」はない?
strtotimeのマニュアルに
「US 英文形式の日付を含む文字列が指定されることを期待してお り」
とあるのが原因のように思っています。
同じSQLserverに対して
国際化版php-4.2.3からのコンテンツは希望の動作をしているので、
移転先のRedHatES+php-4.3.2の設定の問題だと思います。
この問題に該当する設定は何でしょうか?
■/etc/freetds.conf
[MyServer2k]
host = 192.168.0.18
port = 1433
# tds version = 8.0
tds version = 4.2
charset = sjis
client charset = sjis
PHP-users メーリングリストの案内