質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

2252閲覧

PHP実行後の文字化け

gsuisk

総合スコア72

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/08/29 14:20

PHPの参考書で勉強していて、現在の日付を日付フォーマットで出力するということを以下のコードで実行しました。

PHP

1class Day{ 2 3 public static function fmt($date){ 4 $str = $date->format('y年m月d日'); 5 return $str; 6 } 7 8} 9 10$now = new DateTime(); 11echo Day::fmt($now);

実行結果は正しく表示されたのですが、実行後にコードを見てみたら
('y年m月d日') の部分が ('yå¹´m月dæ—¥') このように文字化けしていました。

文字化けしたまま再び実行しても結果は正しく表示されます。

何度('y年m月d日')に戻しても、実行するとコードは文字化けします。

なぜでしょうか?

また、もう一つ疑問な点がありまして、、、

$now = new DateTime();

これはPHPが元から用意しているDateTimeクラスから$nowというインスタンスを作成しており、
->format() はDateTimeクラスのformatメソッドを使用している。という認識で正しいでしょうか?

回答いただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

冒頭でheaderにてcharsetでutf8と宣言してみては?

php

1<?php 2header('Content-Type: text/html; charset=UTF-8');

投稿2017/08/30 00:16

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gsuisk

2017/08/30 08:59

試しましたがだめでした、、 Failed to activate the bracket-matcher package Uncaught TypeError: Cannot read property 'openScopes' of undefined というエディタのエラーが出てファイルの中身が空になるという状態です。 他のエディタでは問題ないのでAtomをアンインストールしようと思います。
guest

0

PHPはあえてそうしない限り、実行時に実行したファイルの中身を変化するようなことはないです。それは、ファイルの更新のタイムスタンプを見ればわかると思います。なので、ファイル自体は保存したときのままです。
実行して動くってことはファイルと実行環境の間では文字化けはないってことです。
だから、ファイルを開いたエディタの表示している文字コードがファイルの文字コードとあっていないだけでは?

また、もう一つ疑問な点がありまして、、、
$now = new DateTime();
これはPHPが元から用意しているDateTimeクラスから$nowというインスタンスを作成しており、

そうです

->format() はDateTimeクラスのformatメソッドを使用している。という認識で正しいでしょうか?

$nowっていうインスタンスのformatメソッドじゃないかな?

投稿2017/08/29 14:59

oskbt

総合スコア1895

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gsuisk

2017/08/29 15:20

ご回答ありがとうございました。 エディタ(Atom)の設定ではファイルの文字コードはUTF-8になっているので、エディタの表示している文字コードが異なるのでしょうか?これを調べる方法はあるでしょうか? 「formatメソッドを持つDateTimeクラス」をコピー(インスタンス化)したものが$nowで、当然$nowもformatメソッドを持っていて、それを利用した。 正確に言うとこういうことでしょうか?
guest

0

ベストアンサー

ちょっと調べました、

('y年m月d日');

('y年m月d日');

と表示されるパターンはUTF-8で保存されたファイルをLatin1で開くとこうなるっぽいです。

ので、UTF-8対応のエディタで開いてみてください。

PHP

1$now = new DateTime();

の認識はそれで大丈夫です。

投稿2017/08/29 14:33

編集2017/08/29 14:34
rururu3

総合スコア5545

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gsuisk

2017/08/29 14:46

ご回答ありがとうございます。 使っているエディタはAtomで、設定を見てみてもファイルエンコーディングは Unicode(UTF-8)となっており問題ないかと思うのですが、PHPの設定でしょうか? PHPをインストールしてからphp.iniなどの設定部分は触れていないのですが、設定が必要なのでしょうか?
rururu3

2017/08/29 14:53

atomはちょっとわからないので、とりあえずはwindowsでしたらメモ帳で開いてみて文字化けするか確認してみてくださいー
gsuisk

2017/08/29 15:22

メモ帳にプログラムをコピーして保存、実行すると実行結果は文字化けしましたが、メモ帳のコードは文字化けしていませんでした。
rururu3

2017/08/29 15:29

コピペするんではなくて、atomで開いて文字化けするファイルをメモ帳でUTF-8指定で開いて欲しい感じです。
gsuisk

2017/08/29 15:34

UTF-8指定で保存してみましたが、文字化けはしませんでした。('y年m月d日')のままです。
rururu3

2017/08/29 15:36

環境お伺いするの忘れてました。 実行環境はメモ帳あるということはWindowsのコマンドプロンプトでやってます?
gsuisk

2017/08/29 15:41

コマンドプロンプトは使っていません。 ただメモ帳を起動して、そこに問題のプログラムを張りつけて保存(ここで文字コードをUTF-8指定)しました。そのあとに既に起動しているメモ帳にあるプログラムを再び確認しました。 見当違いなことをしていたらすみません、、
rururu3

2017/08/29 15:44

となると、ブラウザで実行結果みてる感じですか?
gsuisk

2017/08/29 15:52

そうです。ブラウザでlocalhostにアクセスしています。 メモ帳をエディタのように使い保存(UTF-8指定)すると、ブラウザは文字化けしてしまいます。
gsuisk

2017/08/29 15:53

何度もわかりづらいことを質問してすみません。。
gsuisk

2017/08/29 16:10

ありがとうございます。 メモ帳にUTF-8で保存したものをブラウザで見ると文字化け→ブラウザの問題 ということでしょうか?エディタの('y年m月d日') この部分が文字化けするのもブラウザによる影響だということでよろしいでしょうか?
gsuisk

2017/08/29 16:14

また先ほどまで実行結果が出力されていたブラウザを更新すると何も表示されないという現象も起きています、、、パソコン自体すごく重くなっているので何か不具合があるのかもしれません。 一度確認してみます。
rururu3

2017/08/29 16:17

ブラウザのせいか判断するために、エンコードの設定を変更して文字化けしない文字コードがあるか調べるって感じですね ※ちなみにですが、このプログラムに関して一つのphpファイルで構成されているって言う感じですか(いっぱいファイルがあったら全部UTF-8にした方がいいかも
gsuisk

2017/08/29 16:34

一つのphpファイルで構成されています。ちなみに echo mb_internal_encoding(); ではUTF-8が返り、 echo mb_detect_encoding('y年m月d日'); でもUTF-8が返り、 echo mb_detect_encoding('yå¹´m月dæ—¥'); でもUTF-8が返ります。
gsuisk

2017/08/29 16:43

ブラウザを更新すると何も出力されなくなる理由はわかりました。 エディタの不具合なのか、そのphpファイルの中身が急に空になるということが起きます。文字化けとの因果関係はわかりませんが、とにかくエディタが不具合を起こしているのかもしれません。
rururu3

2017/08/29 17:11

なんかatomが悪さしてるとかいう感じがしますね。 再起動してatom一切起動しないでメモ帳だけでやってみたりしてみては
rururu3

2017/08/29 17:17

mb_internal_encodingやらmb_detect_encodingで全てUTF-8ってでてるパターンはUTF-8で保存してるパターンしかなかったので、保存自体に問題はなさそう・・・
gsuisk

2017/08/30 08:54

試しに別のエディタ(Brackets)で問題のファイルを開いても文字化けしませんでした。 再びAtomで同じファイルを開くと文字化けしました。 なのでこれはエディタの問題ですよね。。。
gsuisk

2017/08/30 08:56

Atomを一度アンインストールしようと思います。 PHPファイルはローカルディスク下にあるのでエディタをアンインストールしてもファイルは消えませんよね?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問