• 締切済み

PHP文字化けの問題

いつもお世話になっております。 僕は下記の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"】と設定しております。 質問:どうして【年】じゃなくて【・】と出力されたのか? 教えて頂ければ幸いですが、宜しくお願い致します。

  • samom
  • お礼率23% (26/110)
  • PHP
  • 回答数3
  • ありがとう数0

みんなの回答

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.3

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

  • seastar3
  • ベストアンサー率69% (99/142)
回答No.2

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

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

なんともいえませんが <?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はやめたほうがいいですけどね

関連するQ&A

  • 【PHP,JavaScript】文字が誤変換される

    先週以下の質問をさせていただいたものです。 http://okwave.jp/qa/q6958620.html 上の質問の回答としましては、出力しているブラウザ側の文字コードがおかしい ということでした。 そこで、PHPの文字コードを「php.iniファイル」の中身を以下のように変更してみました。 default_charset = "Shift-JIS" ↓ default_charset = "UTF-8" ところが、添付させていただいた画像のように別の文字化けが発生してしまいました。 それとも設定の仕方がまずかったのでしょうか。 以上、よろしくお願いいたします。

  • phpで文字化け(php.ini)

    phpスプリクトはshift-jisで、文字化けしたためphp.iniをいじってみました。しかしどうやっても一定の漢字が文字化けしてしまいます。(「貼る」等…) 設定した箇所は下記の通りです(色々なサイトを回って調べた結果このような設定にしました) PHPのバージョンは4.4.1です。 default_charset = "Shift-JIS" mbstring.language = Japanese mbstring.internal_encoding = SJIS mbstring.http_input = auto mbstring.http_output = pass mbstring.encoding_translation = Off mbstring.detect_order = auto mbstring.substitute_character = none; mbstring.func_overload = 0

    • ベストアンサー
    • PHP
  • [HTML-PHP]あるPHPファイルだけ文字化け

    お世話になります。 XP/PHP5.2.9/Apache2.2.11 の環境で、簡単なシステムを作っているのですが、その際に PHP側で header( "Content-Type: text/html;charset=shift_jis"); HTML側で <meta http-equiv="content-type" content="text/html; charset=shift_jis"> と明示的にSJISにしているのですが、実際にローカルで確認すると文字化けしてしまうPHPファイルがあります。(1ファイルのみ) 他のPHPファイルは同様のヘッダー情報を送信していますが、文字化けせずに画面出力されています。 HTML-PHP初心者のため、補足等必要になるとは思いますが、どうぞご教授下さい。

    • ベストアンサー
    • PHP
  • 自分で書いたPHPスクリプトが、文字化けしてる

        テキストエディタでPHPのスクリプトを書いて サーバにアップしてブラウザで表示すると、文字化けしてしまいます。 手動でブラウザのエンコード設定をしなおすと正常に表示されるんですが ページ更新したらデフォルトで文字化けしてます。 PHPスクリプトを書いて、アップロードしてブラウザで表示する時に 文字化けしないようにするには、どうすればいいのでしょうか? 以下のコードは書いていますが、文字化けします↓ <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">    

    • ベストアンサー
    • PHP
  • PHPの文字化けに関して

    こんにちは。 現在、PHPでWeb画面を作成しているのですが 日本語がすべて文字化けして困っています。 php.iniの設定はWebなどを参考にして以下のような 設定です。 宜しくお願い致します。 =php.iniの設定= default_charset = SJIS mbstring.http_input = auto mbstring.http_output = pass mbstring.internal_encoding = SJIS mbstring.detect_order = auto mbstring.substitute_character = none =.php内の記述= <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> =環境= サーバー:Vine Linux3.2

    • ベストアンサー
    • PHP
  • 文字化けで混乱中です...

    こんにちは。PHPの文字化けで混乱しており、どなたかにご助言いただければ幸いです。 現在、PHPは拡張子「.php」、HTMLは拡張子「.html」で動いているものを 拡張子「.html」でもPHPを動作させたいので、.htaccessにて AddType "application/x-httpd-php; charset=Shift_JIS" .php .html と指定しました。 これで拡張子「.html」でもPHPが動かせるようになりましたが、それとともにPHPスクリプトの入っていない他のHTMLファイルが文字化けしてしまうようになりました。 しかし、.htaccessに AddType "application/x-httpd-php; charset=Shift_JIS" .php .html AddType "text/html; charset=Shift_JIS" .html こうしてしまうとPHPが効かなくなるし...うーん?と 多分スゴイ手前のところで混乱してきてしまいました。 HTMLファイル内ではmetaでShift-JISを設定しています。 HTMLファイル内でheaderとかやらない方法で、文字化けを回避する方法をお教えいただけますと助かります。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • UTF-8のXMLがSJISのPHPで文字化け

    携帯サイト用にShift-JISで書いたPHPページにて、以下のように外部XMLファイル(UTF-8)をロードしていますが文字化けしてしまいます。 <?php $list = simplexml_load_file('test.xml'); echo ($list->data[0]->name); echo ($list->data[0]->tel); echo ($list->data[0]->address); ?> 各ファイルの文字コードはそのままで、文字化けせずにデータを表示することは可能でしょうか?php.iniなどの設定変更をする権限もないので、ソースコードレベルでの解決策を探しています。 勉強不足で恐縮ですが、私はPHPに詳しくないため、なるべく具体的なソースコードをご提示いただいた上で対策をご教授いただけると助かります。 以上、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • phpファイルで文字化け

    お世話になります。 PHP4で作成しています。 あるPHPファイルが読み込まれたとき、 パラメータが引き渡されているか確認し、 引き渡されていない場合には、 別のページにジャンプするように以下のように作成しています。 if ($aaa==""){ header("Location: aaa.php" ); }else{ header("Conten-type: text/html; charset=Shift_JIS"); } 通常、aaa.phpファイルは文字化けしないのですが、 このファイルから自動的に飛んだときに 文字化けで表示されてしまいます。 ブラウザの更新ボタンをクリックすると、 きちんと表示されるようになります。 文字化けした時のエンコードを見ると 西ヨーロッパ言語になっています。 aaa.phpファイルでも、 charset=shift_jis と指定しているのですが、 何が原因でしょうか? よろしくお願いします。

    • 締切済み
    • PHP
  • PHPの文字コード (php.iniの設定)

    php.iniを以下のように設定した場合について教えてください。 (PHPの参考書に載っていたWindows環境での設定例です) output_buffering = On output_handler = mb_output_handler default_charset = Shift_JIS extension=php_mbstring.dll mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = auto mbstring.http_output = SJIS mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = auto mbstring.script_encoding = EUC-JP 1. この設定は「PHPの記述されたファイルはEUC-JPで、 ブラウザに表示される時点でShift-JISに変換される」 ということですか? 2. PHPの参考書(PHP5対応)に、 「PHPアプリケーションを構築する場合、文字コードを Shift-JISにすると、PHPのバージョンやphp.iniの設定に よっては文字化けの原因になることがあるので、 Windows環境でもEUC-JPで保存することを強くお勧めする」 というようなことが書かれていました。 素人考えで、すべて同じ文字コード(EUC-JP)のほうが 楽なのではないかと思ったのですが、上記のように 設定するのはどういう理由からでしょうか? 3. CSSファイルやテンプレートファイル(Smarty)の 文字コードは、Shift-JISとEUC-JPのどちらで保存 すればいいのですか? 4. metaタグのcharsetはShift-JISであっていますか?

    • ベストアンサー
    • PHP
  • PHPの文字コードについてお願いします。

    Apache2、MYSQL、PHP5を使用して勉強しているものですが、文字コードについて質問させてください。 まず、参考書を読みながらphp.iniをこの用に設定しました。 output_handler =mb_output_handler default_charset = "Shift_Jis" extension_dir = "c:\php\ext\" extension=php_mbstring.dll extension=php_mysql.dll mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = auto mbstring.http_output = EUC-JP mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none; MySQLの文字コードはウィザードでUJISに設定して勉強しています。 Apache2の設定は本で支持が無かったのでとくに設定はしていません。 しかしこれでは文字化けが起こったりしてしまい、Googleなどで調べたらUTF-8で統一するのが良いと書かれていたのですが、どのように変更すればわからないです。私の購入した本では「mbstring.detect_order = auto」の意味などが書いて無くて、ただ丸写しの状態になってしまい設定方法が身についていません。なので今回の質問で、文字コードの設定を覚えておきたいのです。 1.UTF-8などの文字コードに変える場合は、Apache2の設定を変える必要があるのでしょうか。 2.上記したphp.iniの設定はどのような意味があるのでしょうか?SHIFT-JISでPHPを書くということでしょうか? できれば各自の良い設定方法を教えてください。 3.たとえばSHIF-JISで書いたPHPファイルを保存するときはSHIFT-JIS形式で保存するのでしょうか? 4.なぜphpはSHIFT-JISで書いているのにMySQLではUJISの文字コードを使用するのでしょうか。統一した方がいいのでは? 5.utf-8に文字コードを変える場合は、php.iniのどの部分を設定し直せばいいのでしょうか? 一つでも回答して頂けるととても嬉しいです。よろしくお願いいたします。

    • ベストアンサー
    • PHP