- 締切済み
DBはOK。WEB上で文字化けする。
分からない事あります。お力を貸して頂きたいのですが。。。 ある海外のサイトから「会員制サイト」の無料スクリプトを 利用しています。 入力フォームに「漢字」を入力して送信ボタンを押すと、 DBに文章が正しく書き込みされています。 しかし、DBの内容を表示させると、WEBページ上で文字化けして 表示されます。 どのような記述をすれば、DBの内容が正しくWEBページに 表示する事ができますでしょうか。 サーバーはサクラインターネットを利用しています。 いろいろとWEBサイトで調べたところ .htaccessの方法を試しましたが、改善せず、他のHTMLページが 文字化けしてしまう状況です。 AddType "text/html; charset=Shift_JIS" .html .php どなたかお力を貸してください。 お願いいたします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- altrn
- ベストアンサー率62% (10/16)
補足ありがとうございました、遅くなりました。 他の回答者様がおっしゃっているように、 mysql_query('set names XXXXX'); が一番可能性が高いのではと思っていたのですが... >DBはsjisで閲覧すると文字化けなく表示されます。他の文字に(UTF-8) などにすると文字化けします。 >ということは、全てのPHPファイルをs-jisにするということなのでしょうか。 ということですが、基本的にはtany180sx様がおっしゃっているような 部分はすべて同じ文字コードに統一した方がいいと思います。 ここではsjisに統一する必要があるでしょう。 私個人としては、携帯サイトでもない限りUTF-8に統一しておくことをおすすめします。特に海外製のものを使うことがある場合は、sjisより困らないことが多いのでは、と思います。 sjisに統一するのであれば、 1.)<meta http-equiv="content-type" content="text/html; charset=SHIFT_JIS"> をHTMLとしてファイルに書き、 2.)コード内にひらがなを使っている場合、そのファイル自体をsjisで保存します(エディタなどで)。 ※しかしここで気づきましたが、おそらくデフォルトではsjisなのでこの2.は特に必要ないかもしれません。(UTF-8を使う場合には注意が必要なポイントでした。) 3.)mb_...などの関数を使っている場合、その前までには mb_internal_encoding('sjis'); を宣言しておきます。 これに関して、substrやstrtolowerなどの文字列関数をコード内(ご使用のライブラリ内)で使っている場合は、これをmb_substrやmb_strtolowerに置き換える必要があるかもしれません。 (一部が文字化けするということはこれが原因の可能性も...) おそらく送信ページとDBはsjisで統一されているからうまくDBにsjisで入っているのだろうとは思うので、 問題はDB取り出しから、出力までにあると思います。 そこで、繰り返しになりますが、 文字列を出力ファイルのHTMLで <meta http-equiv="content-type" content="text/html; charset=SHIFT_JIS"> となっているかや、 DBに取り出してからその文字列を出力・表示するまでの操作(上記のsubstrなどがないか) などを確認してほしく思います。 最後に、申し訳ありませんが私は若輩者で、 正確にわかっていないことも多くあると思われます。 間違いや見当はずれなどあるかと思います。 どうぞ参考程度にお考えください。
- tany180sx
- ベストアンサー率63% (239/379)
まずPHPとMySQLの設定を確認してくださぃ。 PHPファイルに記述がなければphp.iniの設定が有効になります。 1.PHPファイルの文字コードを設定 mbstring.internal_encoding // mb_internal_encoding() 2.MySQL4.1以降?はMySQLにPHPの文字コードを送信しておく mysql_query('set names utf8'); // 例:UTF-8 3.PHPでHTML等を出力する時の設定(レンタルサーバは無変換の設定が多い?) mbstring.http_output // mb_http_output() output_handler // mb_output_handler() 4.ヘッダーとメタタグを出力 header("Content-Type: text/html;charset=UTF-8"); <meta http-equiv="content-type" content="text/html; charset=UTF-8"> 具体的にどこになにを書けばいいのか分からなければ そのスクリプト名を挙げればもしかすると誰かが・・
- dalianse
- ベストアンサー率35% (7/20)
DBがMySQL5なら、 DBへの接続後、 $dbh->query("SET NAMES ujis"); でいけるかもしれません。 $dbhは接続時に返ってくるオブジェクトです。
補足
書き込みいただきありがとうございます。 さくらインターネットがMYSQL5かどうか、 わかりませんでした。 お恥ずかしいのですが、プログラムをみたらクラスを使っている ようで、どこがquery("SET NAMES ujis");になるのか、 分からない状況です。 アドバイスありがとうございました。
- altrn
- ベストアンサー率62% (10/16)
DBの文字コードと、PHPスクリプト内で使用している文字コードと、 PHPファイル自体の文字コードと、HTMLファイルの文字コード宣言 などが一致している必要があります。 送信->取得->書き込み はうまくできる、とのことなので、ある程度は 一致しているとは思うのですが... 送信ページと表示ページの文字コードが違うかもしれません。 表示した日本語すべてが文字化けするのか、 それとも一部の文字が変になるのか などの補足をお願いしたくおもいます。
補足
altrnさん、こんばんわ。 ご回答頂きありがとうございます。 >>表示した日本語すべてが文字化けするのか、 >>それとも一部の文字が変になるのか カナタナと英語は文字化けしませんが、 ひらがなは完全に文字化けしています。 漢字は全体の約半分以上文字化けしています。 >>DBの文字コードと、PHPスクリプト内で使用している文字コードと、 >>PHPファイル自体の文字コードと、HTMLファイルの文字コード宣言 >>などが一致している必要があります。 DBはsjisで閲覧すると文字化けなく表示されます。他の文字に(UTF-8) などにすると文字化けします。 ということは、全てのPHPファイルをs-jisにするということなのでしょうか。それは、一つ一つのファイルに <meta http-equiv="Content-Type" content="text/html; charset=shift_jis" /> を記述するのですか? それとも一括で変更できる方法があるのでしょうか。 現在のプログラムすべてのPHPファイルを見ましたが、 どこにも文字コードの記述がありませんでした。
補足
書き込みを頂きまして、ありがとうございます。 先ほどから、ヘッダーとメタタグを問題のPHPファイルに加えたり、 php.iniなどを加えたりしているのですが、問題が解決しない状況です。 いろいろとファイルを見てみるとクラスを使用していたりと どこをどう記述したらいいか分からない状態です。 スクリプト↓になります。 http://www.geniegate.com/listings/downlead/ のDownload Free Version (zip file)のリンクにあるスクリプトです。 インストール方法もこちらにありますが、かなり大掛かりな作業になると 思います。。。 http://www.geniegate.com/listings/dolphin/manual/install.php