PHPのプログラムで


<?php
header('Content-type: text/plain; charset=utf-8');
echo "サンプル";
echo "sample";
?>

と書いてsample.phpで保存し、ブラウザから「http://documentroot/sample.php」でアクセスすると

マルチバイトの文字が「???????」と表示されてしまいます。
このときファイルの文字コードもutf-8にしています。
マルチバイト文字でなければ、「sample」などは正しく表示されます。

なぜ「?????」になっていまうのでしょうか。
Apacheやサーバーなどの設定で正しく表示させる設定方法がありましたら教えてください。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/07/25 11:00:45
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:km1981 No.1

回答回数429ベストアンサー獲得回数49

ポイント200pt

mbstring.http_outputとmbstring.internal_encoding の設定が

UTF-8以外になっているのだと思います

php.iniを修正してください

id:anesawa

internal_encodingに合わせたらうまく行きました。

ありがとうございます。

2011/07/25 10:59:19

その他の回答1件)

id:km1981 No.1

回答回数429ベストアンサー獲得回数49ここでベストアンサー

ポイント200pt

mbstring.http_outputとmbstring.internal_encoding の設定が

UTF-8以外になっているのだと思います

php.iniを修正してください

id:anesawa

internal_encodingに合わせたらうまく行きました。

ありがとうございます。

2011/07/25 10:59:19
id:tezcello No.2

回答回数460ベストアンサー獲得回数69

> マルチバイトの文字が「???????」と表示されてしまいます。

その時、ブラウザの文字エンコーディング(ブラウザの「表示」メニュから辿っていく)をいろいろ変えてみるとチャンと表示できる場合があります。

その時のエンコードは何でしょうか?

(Firefox なら、右クリックで「ページ情報」を選ぶとMIMEタイプや文字エンコーディングが表示されるので、この値でもOK。)

多分、UTF-8 になっていないんじゃないでしょうか?

以下のような事が考えられます。

PHPスクリプトの保存が UTF-8 になっていない。

 BOM付になっているのかも。UTF-8(BOM無), UTF-8N 等 BOM が無いものを指定してください。

header() 実行時以前に、既に何か出力してしまっている。

 <?php の前に改行やブランクがあったり...

Apache の設定や、php.ini が影響する事もありますが...何か変更しているのならデフォルトに戻してみるのも手でしょう。

「utf-8」じゃなく「UTF-8」の方がいいかも...多分どっちでも良いとは思いますけど...


> mbstring.http_outputとmbstring.internal_encoding の設定が

> UTF-8以外になっているのだと思います

それらの設定だけではエンコードが変わる事は無いのでは? > km1981 さん

ob_start() をスクリプト内で呼んでおかないと無効でしょ?

  • id:rouge_2008
    間違いなくUTF-8で保存されているでしょうか?
    他のエディタで開いて確認してみてください。
    UTF-8なのに文字化けする場合は、新規に別のファイルを作成して、正常に表示できるか確認してみてください。
    原因は特定できていませんが、Linux環境で発生した事があります。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません