- ベストアンサー
PHPとSQLについて
- PHPとSQLについて詳しく知りたい方へ
- 旧サーバーから新サーバーにデータを移行する際の文字化け問題
- 文字コードの設定でデータベースからの文字化けを解消する方法
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>どこで文字コードを指定すればいいかわかりません。 common.phpかconfigure.phpでmysqlへの接続が記載されているのでは? CONNECT_DB()というユーザー関数がキーになっていると思います 第4引数でオプションをしていできるかもしれませんし ダイレクトにCONNECT_DBを修正しないといけないかもしれません ただ見る限りclassにもしていないようですし かなり見にくいソースになっているかもしれませんね
その他の回答 (4)
- yambejp
- ベストアンサー率51% (3827/7415)
>phpMyAdmin上では文字化けしてないので、インポートまでは問題ない ああ、ちょっと誤解していました であれば、SQLで接続する際にEUC(ujis)で接続する必要があるのでは? ※クエリーでnamesをいじるなとよくいわれるのでマニュアルの記載をみると こんな感じ? $dsn = 'mysql:host=localhost;dbname=testdb'; $options = array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES ujis', ); $dbh = new PDO($dsn, $username, $password, $options); http://php.net/manual/ja/ref.pdo-mysql.connection.php
補足
<?php include("./common.php"); require("./configure.php"); require_once("./template.php"); mb_language(Japanese); mb_internal_encoding('EUC-JP'); mb_http_output('EUC-JP'); if(get_magic_quotes_runtime() == "1"){ set_magic_quotes_runtime ( 0 ); } CONNECT_DB($DB_host, $DB_user, $DB_pass, $DB_dbName); ↓ 最後近くに $options = array('filename' => "./list.html", 'debug' => 0, 'file2' => "$file2", 'global_vars' => 0, 'loop_context_vars' => 1, 'strict' => 0, 'die_on_bad_params' => 0); (ユーザーやパスワード データベース名は別のphpで指定してます。) となっているんですが、どこで文字コードを指定すればいいかわかりません。 ほかにやったのは、PHPファイルやhtmlファイルの保存をEUCやシフトJISにしても、ほかの部分が化けるだけでデーターベースで引っ張ってきた部分はずっと??のままでした。(これは意味ないですか?)
- nda23
- ベストアンサー率54% (777/1416)
EUC-JPとSJISは半角英数字は同じコードなので、 日本語のフォント名、コメント、変数名などを使うと オカシクなることがあります。 一番怪しいのはPHPのソーステキストがEUC-JPで 書かれていないことです。 DBの文字セットとPHPの文字セットが違うと字化けの 原因になりがちです。
- nda23
- ベストアンサー率54% (777/1416)
1.PHPのソースをEUC-JPで書いていますか? 2.Webの場合、HTMLのcharsetはEUC-JPですか?
補足
phpには //set language mb_language(Japanese); mb_internal_encoding('EUC-JP'); mb_http_output('EUC-JP'); htmlには <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <link href="../import1.css" rel="stylesheet" type="text/css"> import1.cssには @charset "Shift_JIS"; @import "import2.css"; import2.css @charset "Shift_JIS"; @import url("tt01.css"); とあります。
- yambejp
- ベストアンサー率51% (3827/7415)
phpMyAdminは今はutfが標準なので、インポートするテキストデータを一度 euf→utfしてから取り込んだ方がよいでしょう
補足
旧サーバーからの吐き出し時にEUFで吐き出すと内容が文字化けするので、nonで拡張子は.sqlにしてます。ためにしSJISでも試しましたが、ダメでした。 phpMyAdmin上では文字化けしてないので、インポートまでは問題ないと思っているのですが、違いますか?
お礼
解決いたしました。 結論から言うと mysql_set_charset('ujis'); を追加したところ解決しました。 EUC-JP=ujis と思っていたので、mysql_set_charset('EUC-JP');はダメでしばらくはまっていました。 CONNECT_DBが~というところが大変ヒントになりました。 DNS切り替えを遅らせてもらって、切り替え直前だったのでぎりぎり解決できてよかったです。 ほんとありがとうございました。 ついでに聞いておきたいのですが、以下の部分はmysqlに絡まないと書いてあったので mb_language(Japanese); mb_internal_encoding('EUC-JP'); mb_http_output('EUC-JP'); はそのままですが、問題ないですよね?