こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

PHPとMySQLで文字化けしてしまいます。

いつもお世話になっています。

レンタルサーバー(サクラインターネット)で、
MySQL5.1を設定し、データベースを使ったwebサイトをアップしたのですが、
PHP部分の一部に文字化けしてしまいます。
文字コードは、htmlの上部で、UTF-8に設定しています。
システムは、PHPとMySQLで組んであります。
ローカルでは正常に動いているために、理由がわかりません。
どなたか解決方法があれば、教えて下さい。
宜しくお願いします。

投稿日時 - 2009-10-15 21:32:51

QNo.5370079

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

質問番号:5375000 と同じ内容を質問しており、マルチポストになっています。どちらかを閉じるか、両方を閉じて、提示を求められている情報を明記するようにしてください。

MySQLのSQLを実行できる環境で、show文を実行し、結果を教えてください。

(1)有効になっている文字コードの表示
show variables like '%char%'

(2)表定義内容の表示
show create table 表名

また、以下についても教えてください。

(1)検索条件で指定している列のデータ型
(2)前後の空白をどのように取り除いているのか
(3)「完全一致」とは、「=」でかLIKEでか
(4)検索条件なしで検索したら、想定通りのデータが格納されているか

「xxしている」と自己判断するのでなく、他人が客観的に判断できるように、具体的なコード等を提示してください。

投稿日時 - 2009-10-19 14:09:59

ANo.2

MySQLの接続照合順序は正しいですか。??

>文字コードは、htmlの上部で、UTF-8に設定しています。

勘違いされているようですが、データーベース・PHPから吐き出すのは関係ありません。
この設定は、あくまでもHTMLのみです。
ですから、「PHP部分の一部に文字化けしてしまいます。」となります。

>ローカルでは正常に動いているために、理由がわかりません。

サーバー環境と同じバージョンですか。??

もう少し、情報がないと厳しいです。
私共は、貴方のサーバー環境が見えませんので・・・。

投稿日時 - 2009-10-16 18:20:25

お礼

回答ありがとうございます。
MySQLの接続照合順序というのは、MySQLへの接続とデータベースの選択のことでしょうか?
この二つでしたら出来ていると思います。

環境は、サーバの方はMySQL5.1で、自分のパソコンにインストールされているのはMySQL5.0.45-win32なので、同じではありません。

「PHP部分の一部に文字化け」というのは、あるページからPHPでデータべースに登録した内容を、別のページで、PHPで呼び出し、表示させているのですが、その情報が文字化けしたり、空白になっていたりしていました。
いろいろ検索したところ、それはMySQLのクライアント側の文字コードがこちらの文字コードであるutf-8とは別のものになっているからなのではないかと思い、mysql_set_charset()を使用してみたところ、文字化けと空白になってしまうという問題は解決できました。
しかし、今度はまた新たな問題が発生しました。
先程の、PHPでデータベースから呼び出した情報は、一つのテーブルの全ての情報を呼び出していたのですが、また別のページで、条件にあうレコードだけを取り出そうとしています。しかし、条件に合うレコードがあるはずなのに、PHPのmysql_query()で条件を指定したSELECT文を渡してmysql_num_rows()を出力すると0となってしまいます。
データベースに情報を登録するときに、前後の空白は取り除いてあり、検索する文字列の前後の空白も取り除いています。
これも、文字コードが原因なのでしょうか。
もしよろしければ、こちらの回答もお願いします。

投稿日時 - 2009-10-17 15:22:41

ANo.1

>一部に文字化け

具体的な症状があれば書いた方がよいと思います。

いまの情報だと大雑把な想像でしか回答できませんが、
MySQLの言語設定が間違っている可能性があります。

投稿日時 - 2009-10-16 11:27:32

お礼

回答ありがとうございます。
おっしゃられているように、MySQLの言語の設定に問題があったのだと思います。

「PHP部分の一部に文字化け」というのは、あるページからPHPでデータべースに登録した内容を、別のページで、PHPで呼び出し、表示させているのですが、その情報が文字化けしたり、空白になっていたりしていました。
いろいろ検索したところ、それはMySQLのクライアント側の文字コードがこちらの文字コードであるutf-8とは別のものになっているからなのではないかと思い、mysql_set_charset()を使用してみたところ、文字化けと空白になってしまうという問題は解決できました。
しかし、今度はまた新たな問題が発生しました。
先程の、PHPでデータベースから呼び出した情報は、一つのテーブルの全ての情報を呼び出していたのですが、また別のページで、条件にあうレコードだけを取り出そうとしています。しかし、条件に合うレコードがあるはずなのに、PHPのmysql_query()で条件を指定したSELECT文を渡してmysql_num_rows()を出力すると0となってしまいます。
データベースに情報を登録するときに、前後の空白は取り除いてあり、検索する文字列の前後の空白も取り除いています。
これも、文字コードが原因なのでしょうか。
もしよろしければ、こちらの回答もお願いします。

投稿日時 - 2009-10-17 15:30:11

あなたにオススメの質問