PHPのdate関数で日本語文字列が文字化けし、正しく表示されないことがあります。
現象
以下のコードをShift-JISで記述します。
<html>
<head>
</head>
<body>
<?php
date_default_timezone_set('Asia/Tokyo');
echo date('Y年m月d日');
echo '<br/>';
echo '日本語の2バイト文字の文字列です。<br/>';
?>
</body>
</html>
Webブラウザで上記のPHPファイルを表示すると、下図の表示結果となります。date関数で出力した日本語のメッセージの一部が文字化けしています。echoで出力した文字列は文字化けしていません。
対策
エンコードをUTF-8にする
PHPファイルのエンコードをShift-JISではなく、UTF-8に変更すると上記の現象を回避できます。
getdate関数を利用する
gatdate()関数を利用すると、日付の個々の要素を取得できますので、値を整形して表示すると上記の問題を回避できます。
<html>
<head>
</head>
<body>
<?php
date_default_timezone_set('Asia/Tokyo');
$now = getdate();
echo "$now[year]年$now[mon]月$now[mday]日<br/>";
echo '日本語の2バイト文字の文字列です。<br/>';
?>
</body>
</html>
日本語部分はecho, printで出力する
date関数で日本語の出力をしないことで問題を回避できます。
<html>
<head>
</head>
<body>
<?php
date_default_timezone_set('Asia/Tokyo');
echo date('Y')."年".date('m')."月".date('d')."日<br/>";
?>
</body>
</html>
または
<html>
<head>
</head>
<body>
<?php
date_default_timezone_set('Asia/Tokyo');
print date('Y')."年".date('m')."月".date('d')."日<br/>";
?>
</body>
</html>
著者
iPentecのプログラマー、最近はAIの積極的な活用にも取り組み中。
とっても恥ずかしがり。
最終更新日: 2024-01-06
作成日: 2014-06-17