date関数で日本語文字列が文字化けする - PHP

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
iPentec all rights reserverd.