dポイントプレゼントキャンペーン実施中!

いつもお世話になっております。
僕は下記のPHPコードを書きましたが、実行すると文字化けが出てしまう
***************
<?php
$today = mktime(0,0,0,12,2,2009);
echo date("Y年m月d日",$today);
?>
***************
出力: 2009・12月2日
php.iniには 【default_charset = "Shift-JIS"】と設定しております。

質問:どうして【年】じゃなくて【・】と出力されたのか?
教えて頂ければ幸いですが、宜しくお願い致します。

A 回答 (3件)

phpソースの文字コードがsjis だと、年は 0x944e で2バイト目の0x4eは ascii文字のN


date() のformat は多バイト対応ではないので、この0x4e N をもって、「曜日の数値表現」に変換してしまいます。
そうすると、出力後の文字列は、バイト不正を起こすので、どうやっても正しい表示には成り得ません。
対策1:phpソースの文字コードをsjis以外(utf8かeuc)にする
対策2:分割して文字列連結
date('Y').'年'. date('m'), '月', date('d' ).'日'
    • good
    • 0

 まず、php.ini内の"Shift-JIS" は、"Shift_JIS"ですよね。

質問時の打ち込みミスだったら悪しからず。
 そして、extention=php-mbstring_dll を有効化しているか。つまり、先頭の;を削除しているかを確かめます。
 さらに、mbstring.http_outputs=SJIS と、出力用の文字コードを明示します。このmbstring 関連の設定を調べて、書き換えながら、appache のリスタートを繰り返して試していけば、正しく表示されるようになるのではないかと考えます。
    • good
    • 0

なんともいえませんが



<?php
header("Content-Type:text/html;charset=shift_jis");
?>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<?
$today = mktime(0,0,0,12,2,2009);
echo date("Y年m月d日",$today);
?>

とやってもだめでしょうか?
とりあえずはshift_jisはやめたほうがいいですけどね
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!