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

パソコンで入力したお知らせをパソコンと携帯で確認できるようにしたものを、サーバーを移管したところ、携帯で見る方だけ文字化けをおこすようになりました。

<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">

です。

// 表示文字コード
define("ENCDISP", "shift_jis");
// データベース文字コード
define("ENCDB", "EUC-JP");
// =========================================================
// 表示する文字コードに変換
// =========================================================
function cnv_dispstr($string) {
// 文字コードを変換する
$det_enc = mb_detect_encoding($string, "EUC-JP, SJIS");
if ($det_enc and $det_enc != ENCDISP) {
return mb_convert_encoding($string, ENCDISP, $det_enc);
}
else {
return $string;
}
}

ちなみにこういうのを入れてみてもだめでした。
すいませんが教えてください。

A 回答 (3件)

> 簡単なプログラムの表示はちゃんと読めました。



> ちなみに携帯のページのPHPに
> header('Content-type: text/html;charset=Shift_JIS');
> をつけてみましたが、文字化けは直りませんでした。

上記の内容を合わせて想像するに、PHPファイルの構成も関係しているような気がします。
実際にブラウザ(携帯ブラウザ)からリクエストされるURLのPHPファイルにheader関数を付ければ直るんじゃないでしょうか。

例えば
http://www.example.com/foo.php ←サンプルなので存在しません
が実際にリクエストされるURLだとして、

foo.phpの中身が
<?php
echo 'こんにちは';
include 'keitai.php' //携帯の処理をするPHPスクリプト
?>
と言う形になっているのであれば、

<?php
header('Content-type: text/html;charset=Shift_JIS');
echo 'こんにちは';
include 'keitai.php' //携帯の処理をするPHPスクリプト
?>
このようにすればちゃんと表示される可能性が高いです。

それともうひとつ別のヒントになりますが、正しいヘッダー情報が吐かれているかどうかを確認する方法です。
Firefoxを利用しているようでしたらLiveHTTPHeadersと言うプラグインでヘッダー情報を見ることが出来ます。
他にもコンソールが利用可能であれば、wgetを利用し、
$ wget -S --spider http://www.example.com/foo.php
のようにすればHTTPヘッダーだけを確認できます。
可能であれば、上記の確認方法も是非試してみてください。
(これでSJIS以外の文字コードであれば、やはりヘッダーに問題があり、SJISであれば、PHP内のエンコード処理に問題があることになります)

また、サーバー管理者などがいれば、その方にも相談された方が良いかと思います。(Apacheなどの設定で回避出来る問題ですので)

やはり、そちらのファイル構成などまで把握できないため、
私からこれ以上の詳細なアドバイスは難しいと思います。
申し訳ございませんが、以上を持ちまして回答は終わりにさせて頂きたいと思います。
    • good
    • 0
この回答へのお礼

有難うございました。

携帯のphpをブラウザ上で確認するとき、文字コードをEUCに変更すると内容が見ることができたので、携帯のPHPのみ、charset=EUC-JPにして、EUCで保存し直しました。

それでひとまず見ることができるようになりました。

色々丁寧に回答いただき有難うございました。

お礼日時:2009/05/02 20:05

> 教えていただきました一文は携帯の表示のところに付け加えれば


> いいのでしょうか?書き込み画面などにもすべてつけるんでしょうか?

ソースコードの構成が分からないので、なんともいえませんが、
極端な例を挙げるとこういう感じです。

<?php
header('Content-type: text/html;charset=Shift_JIS');
 :
 :

本当はここまでする必要はないんですが。
echoや画面出力が行われる前であれば大丈夫です。

まずは簡単なプログラムを作ってみて、動作の確認をしてみることをオススメします。
たとえば
<?php
header('Content-type: text/html;charset=Shift_JIS');
echo '日本語出るかな 教えて!goo';
?>
これが正しく表示されるかどうか、確認しみてはどうでしょうか。
    • good
    • 0
この回答へのお礼

丁寧な回答いただき有難うございますm(__)m
簡単なプログラムの表示はちゃんと読めました。

PCの管理者画面より書き込んだものを、PCと携帯で見ることができる形です。以下はその携帯の出力する場所の内容です。
この部分のみ文字化けします。

<?php$count=0;
while(($count<KT_MAX) && ($row=mysql_fetch_array($res,MYSQL_ASSOC))){
$db_date=$row["kdate"];
$db_naiyou=$row["naiyou"];
print $db_naiyou." (".$db_date." 登録)"."<br><br>";
$count=$count+1;
}
?>

ちなみに携帯のページのPHPに
header('Content-type: text/html;charset=Shift_JIS');
をつけてみましたが、文字化けは直りませんでした。

お礼日時:2009/05/01 15:57

おそらくPHP側の問題ではなく、Webサーバー側の問題のようです。



出力したい文字コードはShiftJISのようですので、WebサーバーのContent-Typeが"text/html;charset=Shift-JIS"になっているかどうか確認してみてはどうでしょうか。

Webサーバーの確認が難しい場合は、とりあえずPHPのソースコードに以下の一文を追加してみてください。

header('Content-type: text/html;charset=Shift_JIS');

※画面出力前に追加する必要があります(よく分からない場合はソースコードの先頭に追加してみてください)。

なお、文字コードの対応は以下の優先順位で行うのが良いかと思います。
1.Webサーバーのcontent-typeを変更
2.それが駄目なら.htaccessでcontent-typeを変更
3.それも駄目なら上記header関数部分を別のPHPファイルとして作成し、全てのPHPコードでそれをinclude(require)する。
    • good
    • 0
この回答へのお礼

有難うございます。
ちなみに携帯のPHP表示部分のみ文字化けを起こしています。

教えていただきました一文は携帯の表示のところに付け加えればいいのでしょうか?書き込み画面などにもすべてつけるんでしょうか?

初心者ですいません。

お礼日時:2009/05/01 11:53

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