• 締切済み

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");」の部分をコメントアウトすれば、文字化けした内容が出力されるのは確認しています。 解決方法わかりそうな方、ご教授いただけませんでしょうか?

みんなの回答

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.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 /> とすべきかな。

noname#111181
noname#111181
回答No.1

PHPとMySQLのバージョンが分からないので何とも言えませんが、PHP側はスクリプトをutf-8で記述し、念のため mb_internal_encoding("utf-8"); としていますか? また、DB接続後に mysql_query("SET NAMES utf8", $db); を実行してみてください。 それから、携帯絵文字に対応するUTF-8はありませんから、DBにinsertする際に文字化けしますよ。