localhost にて 文字化け - PHPプロ!Q&A掲示板

3468

  • 0P

localhost にて 文字化け

質問日時 / 2011年11月5日 23:12    回答数 / 8件

Questioner:  ranger  このエントリーをはてなブックマークに追加 

キーワード / 文字化け   

初めまして、

自分のホームページ用のBBSを作り、ネット上で問題なく動いています。

自分のパソコン(localhost)で同じようなBBSとそのための mysqlデータベースを作りましたが、ネット上のと違ってテキストが全部文字化けです。
phpmyadminを使っていますが、データベースのCollation(照合順序)をUTF8にしてもsjis-bin にしても結果が同じで、どうすればいいか分かりません。

もしヒントを頂ければ、よろしくお願いします。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┗A01shimixphpスクリプトの文字エンコーディングは何でしょうか
 ┣A01-1rangerお返事を、ありがとう。 私はまったくの初心者で詳し
 ┃┗A01-1-1ranger書き忘れましたが、index.phpの header は下記の通り
 ┗A01-2rangerデータベースのCollation(照合順序)をUTF8にして、
  ┗A01-2-1shimixとりあえず、mysql_set_charset()は書きましょう。
   ┗A01-2-1-1rangerデータベースへのBBSのユーザコメント入力はindex.php
    ┗A01-2-1-1-1shimix>MySQL query error: INSERT INTO column1 SET ipaddr
     ┗A01-2-1-1-1-1rangerいろいろとアドバイスを頂き、ありがとうございました

回答一覧

並び替え:

A01
answerershimix [11月5日 23:40]

phpスクリプトの文字エンコーディングは何でしょうか?またMySQLに接続した後にmysql_set_charset()を出していると思いますが引数(クライアントの文字セット)は何を指定していますか?

http://jp.php.net/manual/ja/function.mysql-set-charset.php

出来れば「ネット上で問題なく動いてい」るサーバのphpとMySQLのバージョン、ローカルホストのphpとMySQLのバージョンも書いていただくといいかもしれません。

この意見に回答する

ツリーへ TOPへ

A01-1
replyerranger [11月6日 15:00]

お返事を、ありがとう。 私はまったくの初心者で詳しいやりかたが分からないんで…
サーバも自分のPCのバージョンが同じです。 PHPは5.3.6、mysqlは5.5 です。
また、MySQLデータベースのCollation(照合順序)は現在ネットのサーバも自分のパソコンも「sjis-bin」となっています。

スクリプトは、私が作ったものではないのですが、確認したら mysql_set_charset はスクリプトの中にどこにもないのです。

自分のパソコンで普通のechoを使うと文字化けにならないのです。
例えば <?php echo "こんにちは日本" ?> のコードに対して、正確に「こんにちは日本」と表示されます。
Character set を <?php echo mb_internal_encoding(); ?>
でチェックしたら、ネットも自分のPCも 「ISO-8859-1」と、同じ結果でした。
なぜか、データベースの中の文字だけが化けているようです。

不思議に思っているのは、まったく同じスクリプトがネット上で問題なく文字を表示していることです。

よろしくお願いします。

この意見に回答する

ツリーへ TOPへ

A01-1-1
replyerranger [11月6日 15:02]

書き忘れましたが、index.phpの header は下記の通りです。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="jp" lang="jp">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
...
</head>

この意見に回答する

ツリーへ TOPへ

A01-2
replyerranger [11月6日 21:11]

データベースのCollation(照合順序)をUTF8にして、同時にhtmlのcharsetをutf8にしてみました
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

この場合はデータベースからのテキストが正常に表示されました。 そのかわりに、htmlファイルの中の文字が文字化けになります。

分からないのは、データベースもhtmlのcharsetもshift_jis になる場合(ネット上の状況と同様)、何故自分のPCでデータベースからの文字が化けているのでしょうか。

もしヒントがありましたら、よろしくお願いします。

この意見に回答する

ツリーへ TOPへ

A01-2-1
replyershimix [11月6日 21:23]

とりあえず、mysql_set_charset()は書きましょう。

で、データベースへのデータの登録はどうやっているのでしょうか?サーバのデータベースからエクスポートして、ローカルのMySQLにインポートですか?

この意見に回答する

ツリーへ TOPへ

A01-2-1-1
replyerranger [11月7日 13:36]

データベースへのBBSのユーザコメント入力はindex.php スクリプトで行います。
utf8でも、スクリプトを使ってのデータ入力は、英語なら問題なくデータベースに書き込めるが、日本語はできないのです。 次のようなエラーが出ています
MySQL query error: INSERT INTO column1 SET ipaddress = '127.0.0.1', ........

ただし、管理人が phpmyadmin でデータベースへの登録をすると 日本語でも大丈夫です(例えばカテゴリーの名前など)。 utf8設定の場合に正常に表示されているのはその文字です。
問題がどこにあるかと考えられるのでしょうか。

この意見に回答する

ツリーへ TOPへ

A01-2-1-1-1
replyershimix [11月7日 15:17]

>MySQL query error: INSERT INTO column1 SET ipaddress = '127.0.0.1', ........

column1というのはテーブル名ですかね。何でこんな間違いやすい命名をするのかわかりません。もし(テーブル名でなく)カラム名なら明らかにSQL文が誤っています。

http://dev.mysql.com/doc/refman/5.1/ja/insert.html

というか、phpMyAdminでデータ挿入を実行させるときのSQL文(表示されますよね)を参考にコピペすればいいと思います。phpMyAdminのSQL実行で投げられない(エラーになる)SQL文をphpで投げても同じようにエラーにしかなりません。


#あと、mysql_set_charsetは入れたんですよね?
#ずっと書いていますが、応答がないので(汗

この意見に回答する

ツリーへ TOPへ

A01-2-1-1-1-1
replyerranger [11月8日 12:37]

いろいろとアドバイスを頂き、ありがとうございました。
確かに、column1というのはテーブル名でした。 「table1」と書けばよかった、すいません。
テーブルの中の列をsjis にしたら上手くいきました。 
今は全部shift_jisです。
meta タグにも charset=shift_jis で、mysql_set_charsetも使っています。

ありがとうございました。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
マジッククォートとmysql_real_escape_string
 このエントリーをはてなブックマークに追加 
A
magic_quotes_gpcでは、SQLインジェクション対処は十分できません。主な理由として、以下が上げられます。 ・magic_quotes_gpcは文字コードを考慮しないで処理するので、Shift_JISを使っている場合、SQLインジェ...

>>続きを読む

SQLインジェクション対策は時と場合で使う関数が変わります。その時にあったものを使いましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)