重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

PHPは全く分からない状態からの質問です。

旧サーバー(アルファメール)から新サーバー(xbit)に移行の際ディレクトリごと移動しました。
MYSQLは調べながらphpMyAdminを使い、(旧サーバーには既に存在しておりそれを利用。バージョン2.10.3)エクスポート。新サーバーに(バージョン4.1.13)インポートしました。
データーベース・ユーザー名・パスワードはすべて同一にPHPの動作はうまくっているようなのですが、データーベースから引っ張ってきた文字のみがすべて???表示になってしまいます。
文字コードをいろいろいじってみたのですが、直りません。
どこをいじればいいでしょうか?
文字コードはEUC-JP、sqlはujisになっています。

A 回答 (5件)

>どこで文字コードを指定すればいいかわかりません。



common.phpかconfigure.phpでmysqlへの接続が記載されているのでは?
CONNECT_DB()というユーザー関数がキーになっていると思います
第4引数でオプションをしていできるかもしれませんし
ダイレクトにCONNECT_DBを修正しないといけないかもしれません

ただ見る限りclassにもしていないようですし
かなり見にくいソースになっているかもしれませんね
    • good
    • 0
この回答へのお礼

解決いたしました。
結論から言うと 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');
はそのままですが、問題ないですよね?

お礼日時:2014/05/15 11:17

>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.connectio …

この回答への補足

<?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にしても、ほかの部分が化けるだけでデーターベースで引っ張ってきた部分はずっと??のままでした。(これは意味ないですか?)

補足日時:2014/04/30 21:08
    • good
    • 0

EUC-JPとSJISは半角英数字は同じコードなので、


日本語のフォント名、コメント、変数名などを使うと
オカシクなることがあります。
一番怪しいのはPHPのソーステキストがEUC-JPで
書かれていないことです。
DBの文字セットとPHPの文字セットが違うと字化けの
原因になりがちです。
    • good
    • 0

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");

とあります。

補足日時:2014/04/29 00:09
    • good
    • 0

phpMyAdminは今はutfが標準なので、インポートするテキストデータを一度


euf→utfしてから取り込んだ方がよいでしょう

この回答への補足

旧サーバーからの吐き出し時にEUFで吐き出すと内容が文字化けするので、nonで拡張子は.sqlにしてます。ためにしSJISでも試しましたが、ダメでした。

phpMyAdmin上では文字化けしてないので、インポートまでは問題ないと思っているのですが、違いますか?

補足日時:2014/04/29 00:20
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!