人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

文字化けで困っています。view.phpはShift_JISで記述しました。

WindowsXP
Apache 2.0.55
PHP 5.1.1 Shift_JIS
MYSQL 5.0.16 UTF-8
PHPMYADMIN 2.6.4-pl4

PHP.iniの主要な設定

extension=php_mbstring.dll
extension=php_mysql.dll
default_charset = IShift_JISI
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none;

PHPMYADMINを使用してデータを入れました。PHPMYADMINではデータ内容は全て文字化けせずに正常に表示されます。

自分でデータ内容を表示するPHPを書き(view.php)、データベース内容を表示さすと日本語部分が??????????で全て表示されます。変な文字になることもなく、半角英数以外は「?」になります。

ここで色々やりとりして解決に導いてほしいです。

知っている方よろしくお願いします。上記の設定にはこだわっていません。

また、最終的にはLINUXで運用ですので、助言もお願いします。

●質問者: haring
●カテゴリ:ウェブ制作
✍キーワード:2.0 Apache DLL Linux MySQL
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● jouno
●50ポイント

http://php.s3.to/man/function.mb-convert-encoding.html

mysqlのデフォルト文字コードがutf-8になっているということですが、phpmyadminで入力した文字列の実際の文字コードはなんになっているのでしょうか。phpmyadminの文字コードがutf-8ならば、utf-8になっているのかもしれません。phpmyadminをブラウザで見たときの文字コードはなんになっているでしょうか。


また、mb_convert_encodingを使用した上で文字化けしているのでしょうか。使用しないで文字化けしているのであれば、単純に文字コードを変換するか、スクリプトのほうをutf-8にあわせるかすれば解決する可能性があります。ともかく、問題の文字列の実際のエンコーディングを知る必要があります。


mb_detect_encoding()で検証してみてはいかがでしょうか。

http://php.s3.to/man/function.mb-detect-encoding.html

◎質問者からの返答

ご回答ありがとうございます。

phpmyadminはutf-8となっていました。

phpmyadminのトップページには下記のようになっていました。

Language Japanese(ja-utf-8)

MySQLの文字セット UTF-8 Unicode(utf8)

MySQL 接続照会順序 utf_general_ci

mb_convert_encodingというのは使っているのか、分かりません。何処を見れば分かりますでしょうか?

宜しくお願いします。


2 ● jouno
●50ポイント

mb_convert_encoding()は関数なので普通にソースを文字列を検索すれば使っていれば発見できます。


で、$strがmysqlから取り出した文字列だとします。


echo mb_detect_encoding($str,”auto”);


でutf-8になるかどうか確認してください。

その場合、データベースの中には、utf-8の形式で文字列が入っているわけです。ですから、そのまま表示すると、sjisのhtmlにutf-8の文字列が混在する結果となり、文字化けします。


したがって、その文字列を表示する部分以前のところに、


/* 内部文字エンコーディングからSJISに変換 */

$str = mb_convert_encoding($str, ”SJIS”);


の一行を入れてみてください。

◎質問者からの返答

ありがとうございます。

本を見ながらやっているもので、下記のような状態です。なんとなく書き方は分かるのですが、もう少し詳しくお願い致します。

mysql_select_db($database_cannBlog, $cannBlog);

$query_rsBlog = ”SELECT * FROM blog_data ORDER BY updtime DESC”;

$rsBlog = mysql_query($query_rsBlog, $cannBlog) or die(mysql_error());

$row_rsBlog = mysql_fetch_assoc($rsBlog);

$totalRows_rsBlog = mysql_num_rows($rsBlog);

?>

<html>

<head>

<title>無題ドキュメント</title>

</head>

<body>


</body>

</html>

mysql_free_result($rsBlog);

?>


3 ● kai10
●20ポイント

http://allabout.co.jp/career/database/closeup/CU20050321A/index....

phpiniの文字コードの設定 - [データベース]All About

php.iniで、

output_buffering = On

output_handler = mb_output_handler

となっているか確認してください。この設定がないと、確か文字コードの変換を(自動で)行ってくれなかったと思います。

それと、設定の確認は phpinfo() で行うといいです。phpMyAdmin からだと、「PHP情報」です。

◎質問者からの返答

kai10さんご回答ありがとうございます。

output_buffering が1

output_handler がno valueとなっておりました。

output_handler = mb_output_handlerにしてみましたが、駄目でした。


4 ● FTTH
●20ポイント

横レスから

------------------------------------

>output_handler がno valueとなっておりました

>no valueのところが問題でしょうか?

多分問題でしょう。

output_handler = mb_output_handler

とすべき。

------------------------------------


mbstring.internal_encoding = UTF-8

なので、スクリプトをUTF-8で保存して試せば巧くいくような気もします。

一度試してみては。

(単純にecho ”あいうえお”;で文字化けしませんか?)


あと、

>最終的にはLINUXで運用ですので、助言もお願いします。

であれば最初からLINUXで環境設定をしたほうがいいと思います。

WINDOWSで文字コードを合わせるためにやったことを、LINUXでもう一度やることになりかねませんよ。

(勿論十分な知識があれば問題にはならないのですが……)

◎質問者からの返答

スクリプトをUTF-8で保存してみましたがダメでした。

もう少し色々と設定を見直してみます。


5 ● roiko
●10ポイント

もしかして、Apacheの設定が原因ということはありませんか? 自分はそれではまったことがあるので。


httpd.confの中に「AddDefaultCharset」という項目があるので、それを「AddDefaultCharset off」として有効にする。


かつ「Default charset to iso-8859-1」が有効になっていたら、頭に「#」を付けて無効にする。


という対応ではいかがでしょうか? PHP側に問題がなければ、この原因も考えられます。

◎質問者からの返答

そのあたりも含めて設定を見直したいと思います。

質問は一度終了して、色々やってみてから再度質問したいと思います。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ