PHPの初心者ですが、文字化けで困っています。
index.php には以下の内容を入れています。
<?php
include("ja.php");
echo '<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<p>'.$WELCOME_TEXT.'</p>
</body>
</html>';
?>
ja.php には以下の内容を入れています。
<?php
$WELCOME_TEXT = 'ようこそ';
?>
これでindex.phpを表示させても「????」と出るだけなのですが、どうすれば文字化けがなくなるのでしょう?どちらのファイルもUTF-8のエンコードで保存しています。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
補足です。
http://oshiete1.goo.ne.jp/qa1288725.html?from=na …
上記URLの質疑応答が、ほぼ、こちらの質問内容と同じなので、
参考にされると良いですね。
問題の核心部分は、
上記URLの回答NO.2に書かれていると思いますので要チェックです。
それを参考に、
mb_detect_order()にて、
文字コードの検出順を変更されてみてはいかがでしょう?
(php.iniでの現在のmbstring.detect_orderの設定は、「auto」でしょうかね。)
詳しい設定例は、以下参照で。
http://www.php.net/manual/ja/function.mb-detect- …
UTF-8の優先順位をあげると、改善されるかもしれません。
以上で解決されると良いなと思います^^
No.4
- 回答日時:
お話を聞く限り、ブラウザは問題なさそうですね。
>「mbstring.script_encoding no value no value」
が一つ多く入っていました。
この、「1つ多く入っていた」というのは、
phpinfo();
によって表示される一覧表に、
同じ項目(mbstring.script_encoding)が重複して表記されている、
ということでしょうか?
(※「no value」が2度繰り返されているだけ、ではないですよね?)
もしそうだとすると、不思議ですね。
php.iniファイルをもし直接開いて見ることができるのであれば、
そこには、「mbstring.script_encoding」に関する設定文が、
2重に書かれていることになるのでしょう。
私も詳しくないので正確なことは言えませんが、
「その2重は、バグの原因になってそうだなぁ」
と感じます。
ちなみに、私のサーバでは、
phpinfo(); では、
mbstring.script_encoding の項目が表示されません。
つまり、php.iniに、そもそも記載がないのかもしれません。
phpマニュアルの設定例でも、その項目の記述はありませんね。
(http://www.php.net/manual/ja/mbstring.configurat …)
※要するに、記述がなくても、問題なく動くのでしょう
※もっと言えば、記述があることで問題が生じてしまう、なんてこともあるのかもしれません。
もし、php.iniを直接開いて変更できるのであれば、
2つ書かれているうちの1つを、「;」にてコメント化し、
動作を確認してみると良いかもしれません。
(むしろ、「mbstring.script_encoding」の項目自体、コメント化しておいても良さそうですが…。※上記の理由から)
※php.iniの設定変更後は、PHPの使用環境によっては、
Apacheの再起動が必要になるかもしれませんので、
その場合には、再起動方法について、サーバの仕様で確認してみて下さい。
(もし可能であれば、あらかじめ、php.iniの記述に誤りはありませんか~?とお尋ねになると良いでしょう。)
で、php.iniの設定変更が反映されたとして、その結果、
問題が改善されるようなら、設定はそのままにしておく、、と。
気になるようでしたら、レンタルサーバのサポートページでも、
質問されると良いかもしれません。
ブラウザの文字エンコーディングも、UTF-8であり、
ファイルの保存形式も、UTF-8であり、
metaタグの記述も、UTF-8であり、
文字化けしている文字列「????」もUTF-8にエンコードされていて、
さらに、サーバを換えると、正常に表示される、
ということですから、
間違いなく、サーバ側(php.ini)に原因があると思います。
この回答への補足
>「mbstring.script_encoding no value no value」
が一つ多く入っていました。
というのは、問題ないサーバーにはこのストリングはなく、問題のあるサーバーにこのストリングが入っていたという意味です。
補足でいただいたmb_detect_order()でもやはり問題は解決しませんでした。
$WELCOME_TEXT = 'ようこそ';
をindex.phpの中に含めてしまうと問題なく表示されるのですが、データ ファイルを別にした場合にのみこの問題が発生します。複数言語のサイトを作成しようと思っているので、文字列はすべて別ファイルにしたいんですが、根本的にやり方が間違っているのでしょうか。
ホスティング会社に質問してみると "It will still cause it to come out garbled in this method." と、全く解決しない返答があったので、もうあきらめようかと。
複数言語のサイトをMySQLなどのDBなしで作成する方法を探しているんですが。。。
No.3
- 回答日時:
>「UTF-8です」と表示されました。
とのことですから、
ブラウザの表示の設定において、
「文字エンコーディング」→ UTF-8
としてやれば、「????」の箇所は正しく表示されると思います。
まず、この点をご確認下さい。
ちなみに、回答NO.1の方が、それを指摘されていましたね。
ブラウザ(インターネットエクスプローラーとか、Firefox等のことです。)の文字エンコーディングの設定が、すでに、UTF-8であるにも関わらず、「????」ということでしたら、
正直、謎です。その場合には、後述する作業をしてみて下さい。
で、もし、ブラウザの表示設定がUTF-8になっていない場合には、
そのスクリプトファイルがUTF-8で保存されていない可能性が高いので、再度その点をご確認下さい。
(あー、でも、他サーバでは正しく表示されるとのことなので、この可能性は低いですね。)
では、最終手段となりますかね…。
スクリプトファイルに、
phpinfo();
を記述し、そのスクリプトファイルの表示結果を、
二つのサーバで比較してみて下さい。
特に、「mbstring」の項目の比較をして下さい。
マルチバイト(ここでは日本語)文字表示に関する設定です。
言ってみれば、そのサーバにおけるPHPのルールのようなものです。
これを、2サーバで比較し、異なる点があれば、そこがあやしい!
ということになります。
その点を改めて、こちらに記載して頂ければ、
誰かが助けてくれると思います。^^
なお、「????」と表示されるのは、どのブラウザ使用時でしょうか?
試しに、他のブラウザでも確認してみることをお勧めします。
ブラウザの問題の可能性も、なきにしもあらず、なので。
この回答への補足
ブラウザでのエンコーディングがUTF-8になっていることは確認しましたし、IE8、Firefox 3、Chrome 2すべてで同じ結果です。
phpinfo(); で、「mbstring」の項目を確認するとほとんどが同じですが、「????」と表示されるほうには
「mbstring.script_encoding no value no value」
が一つ多く入っていました。
これは関係するのでしょうか。
No.2
- 回答日時:
>index.phpを表示させても「????」と出る
ということなので、おそらくは、
index.phpの内容の文字コードがUTF-8ではないのでしょうね。
つまり、
$WELCOME_TEXT = 'ようこそ';
の文字コードがUTF-8ではないために、
UTF-8で保存されている(と言われている)、includeしている側の
ファイル上で正しく解釈できずに、文字化けとなっていることが
考えられます。
よって、以下のソースを、
include文の下に貼り付けてみて、その結果をウェブブラウザで確認して下さい。
このソースによって、
$WELCOME_TEXTの文字コードがUTF-8かどうか、確認できます。
(確認後は、以下のソースは消して下さいね。)
if(mb_check_encoding($WELCOME_TEXT,'UTF-8')){
echo '$WELCOME_TEXTの文字コードはUTF-8です。'.'<br>';
}
else{
echo '$WELCOME_TEXTの文字コードはUTF-8ではありません。'.'<br>';
}
で、確認した結果、もし、UTF-8ではありません、となったら、
「$WELCOME_TEXT」をUTF-8へ、エンコードしてやりましょう。
エンコードしてやれば、「????」とはならないはずです。
そして、そのエンコードの方法は、
mb_convert_encoding($WELCOME_TEXT, "UTF-8", "auto" );
これだけです。
この一文を、include文の下に貼り付けて下さい。
この一文に関しては、消さずに置いておきましょう。
これがある間は、常にUTF-8にエンコードし続けてくれますから。
----------------------------------------------
ちなみに、2つのファイル、どちらにおいても、
HTML(metaタグ)で文字コードを設定されているようですが、
header('content-type:text/html; charset=utf-8');
と、どちらのファイルでも、
PHP経由でエンコードする方法も試してみて下さい。
このheaderの一文は、一番上(先頭に)に書いて下さい。
この方法でも解決しそうです。(こちらの方がお勧めかも)
HTMLのmetaタグによる方法と、
PHPのheaderによる方法で、若干、効き具合が違うような話を
どこかで読んだ記憶があります。
もし、記憶違いでしたら、ごめんなさい。笑
以上、2つの方法を書かせて頂きました。
どちらでもOKと思われますが、後者をまずは試してみて下さい。
この回答への補足
丁寧にご回答ありがとうございます。両方試したのですが、改善されず、最初の文字コードがUTF-8かどうかの確認でも「UTF-8です」と表示されました。
何がおかしいのか分からず、他のサーバーに置いてみると問題なく表示されました。全く同じファイルなのですが、片方では「????」と、もう一つのサーバーでは「ようこそ」と表示されます。
サーバー側の問題でしょうか。サーバーの何を確認すればよいか、助言いただければ助かります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP PHPプログラムの間違い 1 2022/10/06 14:33
- PHP php ログイン 1 2022/11/01 00:24
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
batファイルでうまく動かないプ...
-
PHPで新しいウインドウで開く命...
-
onedrive にexcelファイルをア...
-
PHP8を使うと、大量のWarningが...
-
PHPで特定のURLにジャンプす...
-
PHP4対応のサーバーではinclude...
-
imagejpegで表示されない。
-
VBAのコードを教えてください
-
CFileDialogの最初のディレクト...
-
これの対応OSを教えて下さい。p...
-
透過PNGが透過されない!!
-
手作業で埋め込んだ、UserForm1...
-
拡張子php画像をjpg画像等に変...
-
PHPからメールを送る@さくらイ...
-
phpでPEAR::DBを使っているので...
-
phpでダイアログがどうしても出...
-
PHP関数 mb_strlenでエラーになる
-
静的HTMLにRDFを表示させる方法...
-
MySQLの配置が変わったため、db...
-
(初歩)PHP5 クオーテーション...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
サーバーにアップすると文字化...
-
PHPExcelバッファへの書き込み...
-
<meta charset="utf-8"><!-- 文...
-
ファイルの文字コードを調べる...
-
HTTPヘッダはメタタグにも記述...
-
mysql→EUC-JP、php→UTF-8の時の...
-
韓国語のファイル名
-
フォームからPOSTされた値をXML...
-
PHPで「®」や特殊文字のエスケープ
-
発生した文字化けに対する対処
-
phpログファイルの文字化けにつ...
-
緊急です!文字コードの設定ミ...
-
[HTML-PHP]あるPHPファイルだけ...
-
phpで動的タイトル
-
EclEmmaレポートのエクスポート...
-
ノートパッドでの文字化けについて
-
特定ファイルのみ文字コード変換
-
csvファイル出力時に文字化けし...
-
PHPのif文でその処理を途中で抜...
-
onedrive にexcelファイルをア...
おすすめ情報