• 締切済み

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

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

みんなの回答

回答No.3

質問番号:5375000 と同じ内容を質問しており、マルチポストになっています。どちらかを閉じるか、両方を閉じて、提示を求められている情報を明記するようにしてください。 MySQLのSQLを実行できる環境で、show文を実行し、結果を教えてください。 (1)有効になっている文字コードの表示 show variables like '%char%' (2)表定義内容の表示 show create table 表名 また、以下についても教えてください。 (1)検索条件で指定している列のデータ型 (2)前後の空白をどのように取り除いているのか (3)「完全一致」とは、「=」でかLIKEでか (4)検索条件なしで検索したら、想定通りのデータが格納されているか 「xxしている」と自己判断するのでなく、他人が客観的に判断できるように、具体的なコード等を提示してください。

  • sabayades
  • ベストアンサー率60% (65/107)
回答No.2

MySQLの接続照合順序は正しいですか。?? >文字コードは、htmlの上部で、UTF-8に設定しています。 勘違いされているようですが、データーベース・PHPから吐き出すのは関係ありません。 この設定は、あくまでもHTMLのみです。 ですから、「PHP部分の一部に文字化けしてしまいます。」となります。 >ローカルでは正常に動いているために、理由がわかりません。 サーバー環境と同じバージョンですか。?? もう少し、情報がないと厳しいです。 私共は、貴方のサーバー環境が見えませんので・・・。

noname#99124
質問者

お礼

回答ありがとうございます。 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となってしまいます。 データベースに情報を登録するときに、前後の空白は取り除いてあり、検索する文字列の前後の空白も取り除いています。 これも、文字コードが原因なのでしょうか。 もしよろしければ、こちらの回答もお願いします。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>一部に文字化け 具体的な症状があれば書いた方がよいと思います。 いまの情報だと大雑把な想像でしか回答できませんが、 MySQLの言語設定が間違っている可能性があります。

noname#99124
質問者

お礼

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

関連するQ&A

専門家に質問してみよう