phpでxampp環境下での文字化けについて

このQ&Aのポイント
  • phpの文字コードはUTF8 データベース照合順序はutf8_general_ciにはしてあります。
  • PHPからMySQLにデータ登録し、phpMyAdminで値を閲覧すると、日本語が文字化けしていますが、PHPで取得・表示は普通にできます。
  • 解決方法としては、データベース接続後に「SET NAMES utf8」というクエリを発行するか、PHP5.2.2以降なら「mysql_set_charset('utf8');」を実行することができます。また、xampp_path/mysql/bin/my.iniとxampp_path/phpMyAdmin/config.inc.phpにも設定を追加・修正する必要があります。
回答を見る
  • ベストアンサー

phpでxampp環境下での文字化けについて

プログラムを初めて組んでいるのですが、どうしてもデータベースを使いたいので phpmyadminを使い、いろいろいじっているのですが、phpでデータベースの内容を 表示したときなのですが、どうしても文字化けが直りません。 (日本語だけ文字化けします) いろいろググってみて以下で解決できそうなのですが、書いてある事がさっぱりわからず どなたか分かりやすく解説してもらえませんでしょうか。 phpの文字コードはUTF8 データベース照合順序はutf8_general_ciにはして あります。 最初の 「SET NAMES utf8」というクエリを発行。 というのはすでに意味がわかりません・・。 --------------------------------------------------------- 【状況】 PHPからMySQLにデータ登録し、phpMyAdminで値を閲覧すると、日本語が文字化けしている。 ただし、その状態の値をPHPで取得・表示は普通にできる。 ※PHP、HTMLの文字コードは「UTF8」。データベースの照合順序は「utf8_general_ci」 【対応】(以下の「xampp_path」はXAMPPのインストールパス) データベース接続後に「SET NAMES utf8」というクエリを発行。 もしくはPHP5.2.2以降なら「mysql_set_charset(‘utf8′);」を実行しても良い。 「xampp_path/mysql/bin/my.ini」に以下の項目を追加・修正 [mysqld] character_set_server=utf8 skip-character-set-client-handshake [mysqldump] default-character-set=utf8 [mysql] default-character-set=utf8 「xampp_path/phpMyAdmin/config.inc.php」に以下の項目を追加・修正 $cfg['DefaultLang'] = 'ja-utf-8'; $cfg['DefaultCharset'] = 'ja-utf-8';

  • PHP
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • agunuz
  • ベストアンサー率65% (288/438)
回答No.1

xamppであればMySQL側を弄る必要はありません。 >もしくはPHP5.2.2以降なら「mysql_set_charset(‘utf8′);」を実行しても良い。 MySQL関数であればそうですが、すでにMySQL関数は「先がない」状態です。PDOやMySQLiを使ってください(マニュアルを読めば載っているのですが・・・)。 http://php.net/manual/ja/function.mysql-set-charset.php PDOなどで接続するのであれば、接続文字列(DSN)でcharsetを指定します。 $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $user, $pass); set namesを使うのはDSNで指定できない(phpが5.3.6未満のケース)だけですが、その場合でも $options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'set names utf8); $pdo = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass, $options); のように書いておくといいです(わざわざ$pdo->query('set names utf8')を書くのは避ける)。

関連するQ&A

  • XAMPPの文字化け

    データベース(MySQL)に接続してデータを表示するというプログラムをPHPで作っています。ですが、日本語の部分が文字化けをしてしまいました。 どうやらソースコードではなくXAMPPの設定に原因があるそうです。 my.iniに以下の記述を追記すればよいとのことなのでmy.iniを変更したのですが、そうするとMySQLが起動できなくなってしまいます(起動してもすぐ自動的にストップしてしまいます) なので、my.iniの内容をコピーしたmy.confを作成し、そこに以下の記述を追記しました。 [client] default-character-set = utf8 [mysqld] skip-character-set-client-handshake default-character-set = utf8 character-set-server = utf8 collation-server = utf8_general_ci init-connect = SET NAMES utf8 [mysqldump] default-character-set = utf8 [mysql] default-character-set = utf8 すると、MySQLは起動できるようになりました。しかしステータスを参照すると以下のように表記されており変更が反映されていません。 +--------------------------+----------------------------------------+ | Variable_name | Value +--------------------------+----------------------------------------+ | character_set_client | cp932 | character_set_connection | cp932 | character_set_database | latin1 | character_set_filesystem | binary | character_set_results | cp932 | character_set_server | latin1 | character_set_system | utf8 | character_sets_dir | D:\program\xampp\mysql\share\charsets\ | +--------------------------+----------------------------------------+ どうすればいいのでしょうか?いろいろ調べて試してみたのですが分かりません。このせいで先に進めず困っております。助けてください。。 保存先フォルダは D:\program\xampp\mysql です。 OSは Windows Vista です。 バージョンは ApacheFriends XAMPP version 1.7.7 + Apache 2.2.21 + MySQL 5.5.16 (Community Server) + PHP 5.3.8 (VC9 X86 32bit thread safe) + PEAR です。 よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • phpMyAdminで文字化け

    MySQLを3.27→5.0にしました。 PHPからデータベースに書き込むと、3.27のときは普通に書き込めたのですが、 5.0になったら文字化けしてしまいます。 コードは全てUTF-8で統一しています。 phpMyAdminは $cfg['DefaultLang'] = 'utf-8'; $cfg['DefaultConnectionCollation'] = 'utf8_unicode_ci'; $cfg['Lang'] = 'utf-8'; $cfg['DefaultCharset'] = 'utf-8'; と設定をしています。 どのようにすれば文字化けがなくなるのでしょうか?

    • 締切済み
    • PHP
  • phpmyadmin 文字化け

    phpmyadmin 文字化けを開きテーブルを見ると日本語が化けてしまいます。 php のプログラムからは読み書き、表記は正しくできます。 いろいろ調べ以下をやったのですがだめでした。 「MySQLの設定」 # vi /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql old_passwords=1 default-character-set = utf8 character-set-server = utf8 collation-server = utf8_general_ci init-connect = SET NAMES utf8 #skip-character-set-client-handshake ※最終的にコメントアウト [mysql] default-character-set = utf8 [mysqldump] default-character-set = utf8 MySQLをリスタートする。 # /etc/rc.d/init.d/mysqld restart 「phpMyadminの設定」 # vi /var/www/phpmyadmin/config.inc.php $cfg['DefaultLang'] = 'utf-8'; $cfg['DefaultConnectionCollation'] = 'utf8_general_ci'; $cfg['FilterLanguages'] = ''; $cfg['DefaultCharset'] = 'utf-8'; $cfg['AllowAnywhereRecoding'] = TRUE; apache再起動 何か足りない点はありますでしょうか? 環境は以下です。 phpMyAdmin •バージョン情報: 3.5.1 (最新版) •サーバ: Localhost via UNIX socket •ソフトウェア: MySQL •ソフトウェアバージョン: 5.1.61 - Source distribution •プロトコルバージョン: 10 •ユーザ: root@localhost •サーバの文字セット: UTF-8 Unicode (utf8)

    • ベストアンサー
    • MySQL
  • XAMPP環境でのphpmyadminで文字化け

    お世話になります。 これまでさくらのレンタルサーバスタンダードで動かしていたPHPのプログラムをXAMPP環境でデバッグしようとしたのですが、何故かphpmyadminでテーブルの内容を照会した時のみ日本語が文字化けして表示されます。 さくら、XAMPPの両環境で 「SHOW VARIABLES LIKE 'char%';」 を実行したところ、どちらの環境も character_set_client utf8 character_set_connection utf8 character_set_database utf8 character_set_filesystem binary character_set_results utf8 character_set_server ujis character_set_system utf8 と表示され、Mysqlの全てのテーブル、カラムの照合順序は「utf8_general_ci」となっています。 phpのプログラム上は問題ないと言えば問題がないのですが、何となく気持ち悪い状態なので、ご質問させて頂きました。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • XAMPPでMySQLで文字化け、文字コード設定について

    MySQLの文字セット: UTF-8 Unicode (utf8)が変更できない。(できればSJISにしたい) 環境: OS:WinXP XAMPP1.6.6 * Apache 2.2.8 + OpenSSL 0.9.8g * MySQL 5.0.51 * PHP 5.2.5 & PHP 4.4.8 (RC2) * phpMyAdmin 2.11.4 症状: コマンドラインから作った全角文字を含む簡易テーブルについて。 ブラウザからphpMyAdminで確認すると文字化けせず読めるが、 DOSからコマンド"select"で確認すると文字化けしてしまう。 DOS窓からコマンド入力で簡単なテーブルsampleを作る。 東京,tokio Kanagawa,kanagawa とうきょう,tokio mysql> select * from sample; +------------+----------+ | ken | kencho | +------------+----------+ | | tokio | | Kanagawa | kanagawa | | ニ、ォ、 | tokio | +------------+----------+ mysql> status Server characterset: sjis Db characterset: sjis Client characterset: sjis Conn. characterset: sjis mysql> show variables like '%char%'; +--------------------------+-----------------------------------+ | Variable_name | Value | +--------------------------+-----------------------------------+ | character_set_client | sjis | | character_set_connection | sjis | | character_set_database | sjis | | character_set_filesystem | binary | | character_set_results | sjis | | character_set_server | sjis | | character_set_system | utf8 | | character_sets_dir | _xampp_mysql_share_charsets_ | +--------------------------+-----------------------------------+ character_set_systemだけがutf8なのは何故でしょうか? 編集したファイル: <my.ini(C:\WINDOWS)> [mysqld] default-character-set=sjis [mysql] default-character-set=sjis [mysqldump] default-character-set=sjis <my.cnf(C:\xampp\phpMyAdmin)>(短縮ダイヤル) default-character-set=sjis init-connect=SET NAMES sjis <config.inc.php(C:\xampp\phpMyAdmin)> $cfg['DefaultLang'] = 'ja-sjis'; $cfg['Lang'] = 'ja-sjis'; $cfg['DefaultCharset'] = 'ja-sjis'; 結果: とりあえず調べた事をファイルに反映させてみましたが、 DOSプロンプトからselect文を実行すると全角文字が読めません。 どうすれば読めるようになりますか? character_set_system utf8を変更するのでしょうか? "http://www.oji.ath.cx/sb/log/eid11.html"を参考にさせて頂きましたが、character_sets_*の意味がいまいち分かりません。 こちらも分かれば教えて頂きたいと思います。 宜しくお願いします。

    • ベストアンサー
    • MySQL
  • UTF8のPHPコードから日本語をINSERTするとphpMyAdmin上で文字化けしてしまう

    ・WindowsXP(SP2)IIS5.1 ・PHP 5.2.5 Win32 ・MySQL 5.1.22 RC Win32 ・phpMyAdmin 2.11.4 多言語(日本語と中国語)を扱える簡単なシステムを試作しているのですが、 test1.php(UFT8-BOM無し)からINSERTしたレコードをphpMyAdminから閲覧 すると日本語が「&egrave;&sup2;&iexcl;&aring;›&pound;&aelig;&sup3;•&auml;&ordm;&ordm;&aelig;」などと文字化けしまくっています。 test2.phpからSELECTすると、まったく文字化けなく呼び出せます。 また、phpMyAdminから直接INSERTしたレコードば文字化けしません。 当初、MySQL4.1.22-win32や、phpMyAdmin 2.8.2.4だったので、 冒頭の最新バージョンにしたりもしてみましたがだめでした。 過去ログや、Webで昨日さんざん調べてみて、確認したのは以下の設定です。 (1) C:\Program Files\MySQL\MySQL Server 5.1\my.ini: [mysqld] character-set-server = utf8 collation-server = utf8_general_ci init-connect = SET NAMES utf8 [mysqldump] default-character-set = utf8 [mysql] default-character-set = utf8 (2) C:\Inetpub\wwwroot\phpMyAdmin\libraries\config.default.php $cfg['DefaultLang'] = 'utf-8'; $cfg['DefaultConnectionCollation'] = 'utf8_general_ci'; $cfg['DefaultCharset'] = 'utf-8'; (3) MySQL Server Instance Config Wizard UTF8を選択しました(MySQL の文字セット: UTF-8 Unicode (utf8)) MySQL 接続照合順序 utf8_general_ci

    • ベストアンサー
    • PHP
  • phpMyadminの文字化けについて

    PHPでINSERTしたものをphpMyadminで確認すると 日本語が文字化けしています。 コマンドプロンプトでテーブルを見てみると文字化けは起こっていません。どこを変えればいいのでしょうか? いろんなサイトを参考にmy.iniを直してみてもだめでした。 ----- my.ini ------ [mysqld] default-character-set = utf8 skip-character-set-client-handshake character-set-server = utf8 collation-server = utf8_general_ci init-connect = SET NAMES utf8 skip-character-set-client-handshake [mysqldump] quick max_allowed_packet = 16M default-character-set = utf8 [mysql] no-auto-rehash # Remove the next comment character if you are not familiar with SQL #safe-updates default-character-set = utf8 ----- phpMyadmin ----- テーブルの照合順序 utf8_general_ci mysql> \s Server characterset: latin1 Db characterset: latin1 Client characterset: latin1 Conn. characterset: latin1 バージョンは以下のとおりです。 XAMPP 1.7.1 MySQL 5.1.33 PHP 5.2.9 phpMyadmin

    • ベストアンサー
    • MySQL
  • phpMyAdminの文字化け

    いつもお世話になっております。 phpMyAdminで文字化けをしてしまいます。 文字コードは全てutf-8で統一しております。 (PHPファイル、データベース) (1)MySQLの設定を変更→解決せず -------------------------------------------------- # vi /etc/my.cnf ↓ ---------- ここから追加 ---------- ↓ [mysqld] character-set-server = utf8 collation-server = utf8_general_ci init-connect = SET NAMES utf8 [mysqldump] default-character-set = utf8 [mysql] default-character-set = utf8 ↑ ---------- ここまで追加 ---------- ↑ :wq -------------------------------------------------- (2)phpMyAdminの設定を変更→解決せず -------------------------------------------------- $cfg['DefaultLang'] = 'utf-8'; $cfg['DefaultCharset'] = 'utf-8'; テーブルの照合順序とカラムの照合順序をutf8_unicode_ciに 変更いたしましたが、ダメでした。 -------------------------------------------------- (3)phpからデータベースに接続直後、SET NAME utf-8を実行→解決せず -------------------------------------------------- function db_conn() {  $db_link = @mysql_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD));  if ($db_link) {   mysql_select_db(DB_DATABASE);   mysql_query('SET NAMES utf-8');   return $db_link;  } } ご教授お願いいたします。 よろしくお願いいたします。 <環境> OS:Red Hat Enterprise Linux ES[ v.4 ] MySQL:4.1.20 PHP:4.3.9

    • ベストアンサー
    • MySQL
  • xampp の mysql 文字化け

    xampp 1.7.3 with mysql 5.1.41です。my.ini を次のように設定しました。 [mysqld] セクションに追加 default-character-set = utf8 skip-character-set-client-handshake character-set-server = utf8 collation-server = utf8_general_ci init-connect = SET NAMES utf8 [client] セクションと [mysql] セクションと [mysqldump] セクションに追加 default-character-set = utf8 これでコマンドラインからテーブルのデータを select すると日本語が文字化けするのです。 サイトを検索すると、上記設定で文字化けが解決するという記事は見つかるのですが・・・・・・。 何が不調の原因でしょうか? 解決策お分かりの方がおられたら、よろしくお願いします。

    • ベストアンサー
    • MySQL
  • PHPとMySQLの文字化けに関して

    PHPとMySQLの文字化けに関して PHPとMySQLを利用したホームページ作成の勉強をしている初心者です。 現在、レンタルサーバーをお借りして、作成したページを表示させようとしておりますが、 文字化けで悩んでおり、解決策をご教授いただきたいと思います。 まず症状についてですが、phpMyAdminを利用してデータを挿入すると、 phpMyAdminでは文字化けしませんが、作成したホームページでは文字化けが発生します。 (???が続くような文字化けです。) 一方、データ挿入用のページを作成し、そこから挿入を行うと、 phpMyAdminでは文字化けが発生しますが、 ホームページ上では一応日本語表示されます。 (phpMyAdminでの文字化けは、こんな感じです。 ã?TMã??ã?¬ã?¢ã??ã?? また、上手く表示できない物もあります。) 希望としては、全ての文字コードをutf-8に統一させたいのですが、 データベース関連の文字コードの設定が出来ず、解決が出来ません。 以下、現在の状況と、素人ながら試してみた点などについて記載します。 (情報の不備などございましたら、お手数ですがご指摘ください。) --------------------------------------------------------------- ■phpinfo関連 □PHP Version 5.1.6 □MySQL Client API version 5.0.82sp1 □default_charset Local Value UTF-8 Master Value no value ■phpMyAdmin関連 □phpMyAdmin Version 2.11.10 □status の結果 #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'status' at line 1 □SHOW VARIABLES LIKE 'char%'; の結果 Variable_name Value character_set_client utf8 character_set_connection utf8 character_set_database utf8 character_set_filesystem binary character_set_results utf8 character_set_server latin1 character_set_system utf8 character_sets_dir /usr/share/mysql/charsets/ □set character_set_server = utf8; の結果 SQL は正常に実行されました (クエリの実行時間 0.0002 秒) と出ますが、変更されません。 □phpMyAdmin上のデータベースの表 データベース 照合順序 DB1 utf8_general_ci DB2 utf8_general_ci information_schema utf8_general_ci 合計: 3 latin1_swedish_ci ■.htaccess関連 .htaccessを設定してFFFTPでアップロードしても、表示されません。 また、別名ファイルでアップし、アップロード先で名称変更すると、消えてしまいます。 ■その他 ファイル作成にはTeraPadを利用し、 UTF-8Nにて保存しております。 ホームページのメタタグには、 <meta http-equiv="content-type" content="text/html; charset=utf-8" /> というものを設定しております。 php.iniやmy.cnf の設定で解決するとの情報もあり、 当該ファイルを探してみましたが、見つけることができませんでした。 --------------------------------------------------------------- なお、レンタルサーバーでの利用では、 .htaccessやphp.ini、my.cnfの設定が出来ない場合もあるそうですので、 そのような場合、どのような解決法があるのでしょうか? どうぞよろしくお願いいたします。

    • 締切済み
    • PHP