PHPの内部文字エンコーディングがSJISの場合に
echo date('Y年m月d日');
を実行すると
2007・09月03日
のように文字化けしてしまう。 これはShift-JISコードにおいて"年"という文字は2バイト目がasciiの"N"と同じで、これがdate()関数のformat指定子であるのが原因である。
EUC-JPやUTF-8では2バイト目以降にascciコードは出てこないので(参考:文字コードについて)、以下のようなコードでこの問題を解決できる。
function myDate(string $format, $time)
{
$encoding = mb_internal_encoding();
mb_internal_encoding("UTF-8");
$formatUtf8 = mb_convert_encoding($format,'UTF-8', $encoding);
$resultUtf8 = date($formatEncoded, $time);
$result = mb_convert_encoding($result, $encoding, 'UTF-8');
mb_internal_encoding($encoding);
return $result;
}
2 comments:
便利なコードスニペットありがとうございます。
変数が2カ所間違っていたので訂正しておきます。
$encoding = mb_internal_encoding();
mb_internal_encoding("UTF-8");
$formatUtf8 = mb_convert_encoding($format,'UTF-8', $encoding);
$resultUtf8 = date($formatUtf8, $time);
$result = mb_convert_encoding($resultUtf8, $encoding, 'UTF-8');
mb_internal_encoding($encoding);
return $result;
激しく遅くなりましたがありがとうございます。
(ブログからはなれてました‥‥)
コメントを投稿