PHPのdate関数で「年」が文字化けした時の対処方法


PHPのエラーについて「PHP date 年 文字化け」です。
PHPで日付を表示する時に欠かせないdate関数ですが「Y年」が文字化けしてしまって困った経験はありませんか?
結構頻繁に使いそうな組み合わせである「Y年」ですが、実は文字コードの影響だったのです。
そうです。あなたの予想通りSJISさんがまたやってくれました。
それでは対処方法を見ていきましょう。

SPONSORED LINK

PHP date関数で「年」の文字が「・」に文字化けする現象

まずは文字化けしてしまうコードと結果を確かめてみます。

echo date('Y年m月d日');

なんの問題もないPHPのdateで現在の年月日を表示するコードです。

//実行結果
2010・01月12日

はい。
「年」が文字化けして「・」になってしまいました。

文字化けする原因と対処方法

PHPを内部エンコーディングSJIS環境で利用するの場合に文字化けが起こってしまいます。
それを回避するにはいくつか方法があります。

「年」という文字列を外部に出してしまう方法

年という日本語だけdate関数の外に出してしまう方法です。根本的な解決にならずにモヤモヤしますが、これはこれで一つの解決方法ですね。

$hoge = date('Y')."年".date("m月d日");

SJISからEUCかUTF-8に変更する

そもそも可能ならば、文字コードの変更が一番の解決策です。
SJISは、今回の文字化け以外にも問題の多い文字コードでプログラムとの相性は良くありません。
これを機にUTF-8に変更をおすすめします。

その他の力技

  • mb_convert_encodingを利用して内部で一時的に文字コードを変更する
  • そもそも「年」の使用をやめて「Y/m/d」形式などに変更する

といった文字化け対策があります。
SJIS環境を避けられない時にはこういったテクニックで乗り切るのも手ですね。

まとめ

やっぱり今回もSJISの魔の手につかまってしまいました。
間違った構文でなくてもこういったエラー要素が出てしまうので本当にSJISさんは気難しいですね。
一生懸命エラーを読み解いていたら結局SJISが原因だったなんていう時間の無駄は避けたい所です。

今日も知識欲は止まらない。

関連トピック

JavaScriptでUA判別してスマホとタブレットを振り分ける方法

JavaScriptを使用してUAでiPhoneやAndroidのスマホを判定したり、増加傾向にあるタブレットを判別する方法メモ。 U

MySQLのrand()ランダム関数の負荷問題を考えてみる

MySQLで結構使う場面が多いランダム関数rand()ですが、間違った指定をするとデータベースに思わぬ負荷をかけることになります。 今

PHPで配列のエラー「Cannot use string offset as an array」がでる場合の対処法

PHPで「Cannot use string offset as an array」が出たら確認したいポイントをまとめました。 このエ

PHPなどでDB不要のブログがまだまだ使えそう

データベースまで利用してわざわざ作るほどでもないブログや、 データベースが使えないサーバーだったり、 とにかく軽量化されたブログを目

PHPのjson_encodeがUTF-8がエラーになってしまう

PHPでjson_encodeがUTF-8を指定していてもなぜか以下のエラーになる場合があります。 [code] PHP Warni

PHPでスマホのUAからキャリア判別する唯一の方法

PHPを使ってスマートフォンのUserAgentからキャリアを判別するたった一つの方法メモです。 今まではキャリアごとの制約やサービス

PHPのmb_send_mail関数やmail関数で文字化け問題を解消する

PHPのmb_send_mail関数やmail関数で文字化けに悩んでいませんか? 正直、色々な原因があるので特効薬のような対処法はあり

Yahoo!デベロッパーネットワーク「Your Request was Forbidden」エラーの対処方法

Yahoo!デベロッパーネットワークのWeb APIで「Your Request was Forbidden」のエラーが返る場合に確認す

Comment

  1. SHOSHI より:

    ありがとう!助かったよ!!

公開日:2010/01/12