みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

mysqlと出力側PHPの文字コード変換について

お世話になります。
現在ちょっとしたサイトを作っていてmysqlを使っています。
携帯用のサイトなのでmysql(UTF-8)⇒PHP(SHIFT-JIS)という風に
PHP側でデータベースの表示をする際、UTF-8からSHIFT-JISに変換しようとしましたが、うまくいきませんでした。
http://oshiete1.goo.ne.jp/qa1764581.html
などを参考に下記のようなコードを書きました。
<?php
$link=mysql_connect("接続先","データベース名","パスワード");
if(!$link){
die("接続失敗");
}
$db=mysql_select_db("d0295dy4db1",$link);
if(!$db){
die("接続に失敗しました");
}
$sql=<<<SQL
select * from yougoshu ORDER BY RAND() limit 1
SQL;
$result=mysql_query($sql,$link);
if(!$result){
die("問い合わせに失敗しました");
}
while($data = mysql_fetch_assoc($result)):
$data = mb_convert_encoding("$data","SJiS-win","UTF-8");
?>
<?php echo $data['word']; ?><br />
<?php echo $data['mean']; ?><br />
<?php endwhile; ?>

ちょっと荒い書き方ですが、「$data = mb_convert_encoding("$data","SJiS-win","UTF-8");」の部分をコメントアウトすれば、文字化けした内容が出力されるのは確認しています。
解決方法わかりそうな方、ご教授いただけませんでしょうか?

投稿日時 - 2010-04-13 15:39:29

QNo.5823266

暇なときに回答ください

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

while($data = mysql_fetch_assoc($result)):
$data = mb_convert_encoding("$data","SJiS-win","UTF-8");

$data配列を、"$data"とすることで文字列に変換して(結果はたぶんArrayって文字列になるかな)、文字コード変換して、$dataという変数に入れる(型は文字列型、内容は文字コード変換の時点で予測不可、半角アルファベットなのでArrayって文字列になる可能性が高い)。
<?php echo $data['word']; ?><br />
<?php echo $data['mean']; ?><br />
この時点で、$dataは文字列型変数なので上記のように扱うと、エラーが出るのではないか?

mb_convert_encodingは配列を扱えないし、配列を"$data"のように扱うのは間違いだし、出力時点で
<?php echo mb_convert_encoding($data['word'],"SJIS-win","UTF-8"); ?><br />
とすべきかな。

投稿日時 - 2010-04-13 23:50:01

PHPとMySQLのバージョンが分からないので何とも言えませんが、PHP側はスクリプトをutf-8で記述し、念のため
mb_internal_encoding("utf-8");
としていますか?

また、DB接続後に
mysql_query("SET NAMES utf8", $db);
を実行してみてください。

それから、携帯絵文字に対応するUTF-8はありませんから、DBにinsertする際に文字化けしますよ。

投稿日時 - 2010-04-13 16:05:02

あなたにオススメの質問