文字コードについて教えてください - PHPプロ!Q&A掲示板

2519

  • 0P

文字コードについて教えてください

質問日時 / 2010年2月14日 20:47    回答数 / 10件

Questioner:  vodka  このエントリーをはてなブックマークに追加 

キーワード / 文字コード    EUC    UTF-8   

はじめまして、独学でPHPを勉強しています。
『PHP+MySQL』という本書を元にPHPの学習をしています。
MySQLとの接続まで勉強したのでテストでレンタルサーバーを借りてボタンを押すとSQL文を実行するプログラムを組んだんですが、文字コードで少し苦戦しています。
本書の中ではEUCで統一していましたが、レンタルサーバーのphpmyadminを使いMySQLにCSVファイル取り込むためEUCでは取り込めなかったのでツールを使用してUTF-8でインポートしました。
いざプログラム(index.php)をアップロードして実行したところ、ボタンを押すとSQL文が実行されDBのデータも表示されました、しかし文字化けしています。
自分なりに原因を調べたところPHPプログラムはEUCコード、MySQLはUTF-8コードで相互に差異があるためではないかと思っています。
そこで教えていただきたいのですが、phpmyadminでEUCデータを取り込むことは出来るのでしょうか?(自分で調べると出来ないという記事を一つ見ました。)
またphpプログラムを作る場合、どの文字コードが最適でしょうか?
UTF-8は国際基準で今後の主流になると書いてあったんですが、文字コードについて詳しいかた教えてください。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01signalphpMyAdminでEUCでインポートできるかどうかはわかり
┃┗A01-1vodka回答ありがとうございます。 文字コードを何を使用す
┗A02shimixMySQLが5.0.7以降でMySQLとphpスクリプトの文字コード
 ┗A02-1vodkaPHPソースがEUC MYSQLがUTF-8 上記の場合PHPソー
  ┗A02-1-1shimix>mysql_set_charsetをMYSQLに渡してEUCとして統一する
   ┗A02-1-1-1vodkaお返事ありがとうございます。 調べてみたんですが、
    ┗A02-1-1-1-1shimix接続したクライアントからクライアントの文字コードを
     ┗A02-1-1-1-1-1vodkaいろいろ教えていただきありがとうございます。 再度
      ┗A02-1-1-1-1-1-1shimixつhttp://www.phppro.jp/phptips/archives/vol42/1
       ┗A02-1-1-1-1-1-1-1vodkaいろいろ調べまして。 PHPのソースをUTF8で記述した

回答一覧

並び替え:

A01
answerersignal [2月14日 21:42]

phpMyAdminでEUCでインポートできるかどうかはわかりませんが、
あえて、EUCにする必要がないのであればコードはUTF-8で書けばよいと思います

  1. UTF-8は国際基準で今後の主流になると書いてあったんですが、
既に主流となっているという認識で問題ないと思います。

この意見に回答する

ツリーへ TOPへ

A01-1
replyervodka [2月14日 21:58]

回答ありがとうございます。
文字コードを何を使用するか現在検討中です。

この意見に回答する

ツリーへ TOPへ

A02
answerershimix [2月14日 21:55]

MySQLが5.0.7以降でMySQLとphpスクリプトの文字コードが違う場合には、mysql_set_charsetでクライアント(phpスクリプト)の文字コードを指定してください。

  http://jp2.php.net/manual/ja/function.mysql-set-charset.php

この意見に回答する

ツリーへ TOPへ

A02-1
replyervodka [2月14日 22:01]

PHPソースがEUC MYSQLがUTF-8

上記の場合PHPソースでmysql_set_charsetをMYSQLに渡してEUCとして統一するということですか?

この意見に回答する

ツリーへ TOPへ

A02-1-1
replyershimix [2月15日 00:42]

>mysql_set_charsetをMYSQLに渡してEUCとして統一するということですか? 

 MySQLのテーブルはUTF-8、接続するクライアント(phpスクリプト)はEUC-JPにするということです。MySQL4.1以降はテーブルの文字コードとクライアントの文字コードの変換が標準になっていますので、サーバのデフォルト文字コード以外をクライアントで使う場合には、クライアントの文字コードを通知するだけでいいです。

  http://dev.mysql.com/doc/refman/4.1/ja/charset-connection.html

この意見に回答する

ツリーへ TOPへ

A02-1-1-1
replyervodka [2月15日 12:28]

お返事ありがとうございます。
調べてみたんですが、

PHPソース⇒EUC  MYSQL⇒UTF-8
の場合。

PHPソースより
「SET NAMES EUC」
をMYSQLに流すと

MYSQLのデータは
UTF ⇒ EUCに変換できるという解釈でいいのでしょうか?

この意見に回答する

ツリーへ TOPへ

A02-1-1-1-1
replyershimix [2月15日 13:22]

接続したクライアントからクライアントの文字コードを設定すれば、サーバと(その接続の)クライアント間で文字コードの自動変換が行われるという点については「その通り」です。データの読み書きすべてで自動的に行われます。

#MySQLが4.1になった当初は「勝手に変換されてしまって」文字化けで悩むケースが多発しました


(念のためですが)マニュアルのmysql_set_charsetの項は読まれましたよね。

>文字セットを変更するにはこの方法を使うことを推奨します。 mysql_query() で SET NAMES ..  を
>実行する方法はお勧めできません。 

(mysql_set_charsetが使える環境であれば)SET NAMESを発行するのではなく、mysql_set_charsetを使ってください。

この意見に回答する

ツリーへ TOPへ

A02-1-1-1-1-1
replyervodka [2月16日 12:29]

いろいろ教えていただきありがとうございます。
再度解釈を書かせて頂きます。

PHPソース ⇒ EUC 
MYSQL  ⇒ UTF-8
の時

①文字コードが違うため、PHPソースより『SET CHARACTER SET EUC』をMYSQLに送ります。
②MYSQLは①によりUTF-8をEUCに変換を行いSQL分を実行しPHPソースに結果をEUCで返す。
③MYSQLよりEUCで戻ってきた結果をHTMLに組み込み表示する。

SET NAMES 
SET CHARACTER SET
の違いは『SET NAMES』はPHPから送るSQL文を指定文字だと命令する。
一方『SET CHARACTER SET』はMYSQLからPHPソースに結果を戻す時の文字も含めて指定できるため、
『SET CHARACTER SET』を使うほうをオススメする。

上記の解釈で間違っていないでしょうか?

この意見に回答する

ツリーへ TOPへ

A02-1-1-1-1-1-1
replyershimix [2月16日 13:38]

http://www.phppro.jp/phptips/archives/vol42/1

mysql_set_charsetはmysql_real_escape_stringでの文字コード指定も同時にやってくれる(escape処理にはmysql_real_escape_stringを使うべき)。

この意見に回答する

ツリーへ TOPへ

A02-1-1-1-1-1-1-1
replyervodka [2月17日 12:27]

いろいろ調べまして。
PHPのソースをUTF8で記述したところ上手く動きました。
たくさんのアドバイスをありがとうございました。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
マジッククォートとmysql_real_escape_string
 このエントリーをはてなブックマークに追加 
A
magic_quotes_gpcでは、SQLインジェクション対処は十分できません。主な理由として、以下が上げられます。 ・magic_quotes_gpcは文字コードを考慮しないで処理するので、Shift_JISを使っている場合、SQLインジェ...

>>続きを読む

SQLインジェクション対策は時と場合で使う関数が変わります。その時にあったものを使いましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)