PHPのエラーについて「PHP date 年 文字化け」です。
PHPで日付を表示する時に欠かせないdate関数ですが「Y年」が文字化けしてしまって困った経験はありませんか?
結構頻繁に使いそうな組み合わせである「Y年」ですが、実は文字コードの影響だったのです。
そうです。あなたの予想通りSJISさんがまたやってくれました。
それでは対処方法を見ていきましょう。
目次
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が原因だったなんていう時間の無駄は避けたい所です。
今日も知識欲は止まらない。
コメント
ありがとう!助かったよ!!