- 締切済み
mysqlの文字化け
お世話になります。 phpmyadminを使用しており、php内からmysqlに接続しているのですが テーブル内の結果が「????」となり文字化けしてしまいます。 phpmyadmin上では正常に日本語データが表示されます。 テーブルの文字コード:utf_general_ci ソースは以下です。 <?php ~DB接続省略~ // クエリを送信する $sql = "SELECT * FROM table"; $result = mysql_query($sql, $link) or die("クエリの送信に失敗しました。<br />SQL:".$sql); //表示するデータを作成 while($row = mysql_fetch_array($result)) { $tempHtml .= "<tr>"; $tempHtml .= "<td>".$row["YMD"]. "</td><td>".$row["NAME"]. "</td><td>".$row["OBJECT"]. "</td>"; $tempHtml .= "</tr>\n"; } //結果保持用メモリを開放する mysql_free_result($result); // MySQLへの接続を閉じる mysql_close($link) or die("MySQL切断に失敗しました。"); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>全件表示</title> </head> <body> <h3>全件表示</h3> <?= $msg ?> <table width = "200" border = "0"> <tr bgcolor="##ccffcc"><td>YMD</td><td>NAME</td><td>OBJECT</td></tr> <?= $tempHtml ?> </table> </body> </html> よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- okbakasine
- ベストアンサー率27% (67/242)
>回答内容がシンプルなNo.3様に補足させていただきました。 なんでわざわざSQLインジェクションの可能性のある使い方してセキュリティーホール作るの?
- BellBell
- ベストアンサー率54% (327/598)
>>5 >1~10まで説明しないと今のプログラマは駄目なのか? ま、俺も1~10まで説明するつもりはないけどね。 #2では、 >「SET NAMES utf8」を最初にMySQLに投げておく。 >後はmysql_set_charset()を利用する。 と、SET NAMESが先でmysql_set_charsetが後になっているからね。 ツッコミを入れたくなるのも、むベなるかなってところでしょ。 まさに、君の書いたリンク先の通りだね。 質問者に技量や知識が不足していると思うなら、「SET NAMES」については紹介しない方が親切ってのもありだと思うよ。 紹介するにしても、順番としてはmysql_set_charsetの次に「SET NAMES」だな。
- BellBell
- ベストアンサー率54% (327/598)
'SET NAMES utf8'クエリーが賛否両論になるのは、mysql_set_charsetという関数がPHP5.0.7で追加されたから。 PHP5.0.7以降なら、推奨されているmysql_set_charsetを使用すべきって事だよ。 ただ少し前なら、まだPHP4のレンタルサーバも多かったので、非推奨であってもPHPバージョンに依存せずに確実に動作する'SET NAMES utf8'を好んだ人もいるって事だね。 どちらも同じ、『クライアントプログラム(=PHPスクリプト)は、UTF8でMySQLに接続します』とMySQLに通知する命令なので、どちらを使用するかが賛否両論なだけで、使用すること自体は必須だと思いますが。 ま、両者を満たすならこんな方法でしょうね。 if (function_exists('mysql_set_charset')) { mysql_set_charset('utf8'); }else{ mysql_query('set names utf8'); }
- root_16
- ベストアンサー率32% (674/2096)
No.1の人に1票。 さらに よくある失敗として、PHPエディターで書いている 文字コードにも注意すること。 html部分も一緒に書いているならなおさら (WindowsだとデフォルトのS-JISになりがち)。 UTF-8なら全部UTF-8に揃えるくらいに考えた方が 結果的に良いです。
補足
phpファイルはutf-8のbomなしになっています。 html部分を削除しても、????となってしまいます。 となると、ほかの方がおっしゃっているような 手法になるのでしょうか。 賛否両論と言ってますが、mysql+phpmyadminの組み合わせは マイナーな組み合わせはないと思っているので 賛否両論となりうる手法で回避するのが何か不思議です。 根本的にDBとPHPでの指定方法に欠陥があるのでしょうか。 ちなみに・・・私はプログラマではなく 思いつきで始めた一般人です・・・ 回答内容がシンプルなNo.3様に補足させていただきました。
- okbakabaka
- ベストアンサー率30% (22/73)
書き忘れたけど良いか悪いかは別にして 手っ取り早く処理するなら賛否両論あるけど 「SET NAMES utf8」を最初にMySQLに投げておく。 後はmysql_set_charset()を利用する。
- okbakabaka
- ベストアンサー率30% (22/73)
PHPのソースの文字コード。php.iniで設定している内部文字コードは大丈夫か?
補足
補足すると言っているだけで、採用するとは言ってませんが・・・ 回答をいただけるのはうれしいですが 回答者欄にて、論争されあげくに教えてgoo事務局に 内容を修正されたり、ちょっと困惑です。 回答欄にない方法で解決できましたので 締め切ります。