PHPからMySQLにUTF8でPOSTして文字化けする現象について

昨今CMSやフレームワークなどを使ってWeb開発を行うことが多くなってきているのでは無いでしょうか。そのため文字コードについてはあまり気にせずに開発を行うことが多いのでは無いでしょうか。
しかしお客様の案件にあったきめ細かい開発を行う場合など、まだまだスクラッチ開発が使われることも多いようです。今回の記事では、PHP(UTF8)からMySQL(UTF8)にデータを読み書きするプログラムでの文字化けを防ぐ方法を紹介します。

弊社のShared Planサーバー(ACE、ZZ、Z、Xシリーズなど)はデフォルトの文字コードにeucが設定されているため、この設定を行わないと文字化けを起こしてしまいます。

 

「Webサイトからお問い合わせが来ない…」とお悩みの方必見!
当サイトのノウハウを詰め込んだ『Web集客の無料ガイド』をご提供

文字化け対策

[php.ini]
「php.ini」を編集します。

CPIサーバーをお使いのユーザーの方は下記手順より、php.iniファイルを取得ください。
Webコントールパネルより「お客様情報>>プログラムのパスとサーバー情報」にアクセスを行う。

利用しているPHPバージョンのリンクをクリックし、表示されたテキストをコピーします。
テキストエディータにペーストし、ファイル名「php.ini」で保存します。

php.iniファイルの設定を変更します。

修正したphp.iniファイルをプログラムを設置している階層にアップロードして下さい。
ここまで設定を行いますと、作成したプログラムから見ると文字化けが解決されるかと思います。
しかし、phpMyAdminからInsertした文字を見るとまだ文字化けしています。

※CMSなどの設定でも同項目を変更する場合が多いです。それぞれのCMSにあった設定でまずはお試しください。

 

[PHPプログラム]
次にphpのプログラムにもコードを追加します。追加するコードは、SQLクエリを実行する前に文字コードを指定します。そうすることでphpMyAdminの文字化けも解決できます。
mysql_query('set character set utf8');

e.g)

  1. $db = mysql_connect('127.0.0.1', 'UserID', 'PassWord');
  2. if (!$db){ die('DBに接続できませんでした。'.mysql_error());}
  3. $db_selected = mysql_select_db('DB_Name', $db);
  4. if (!$db_selected){die('DB選択失敗しました。'.mysql_error());}
  5.  
  6. mysql_query('set character set utf8');
  7. $sql = 'INSERT INTO tbl_name (uid,name,...) VALUES ("1","テスト")';
  8. mysql_query($sql);
  9. mysql_close($db);

mysql_query('set character set utf8');や、set namesは非推奨関数となっておりました。
http://php.net/manual/ja/function.mysql-query.php

mysqli関数を使用しての方法です。以下のコードをDB接続後に実行することで文字化けを防ぐことができます。
$db->set_charset('utf8');

e.g)

  1. $db = new mysqli("localhost", "UserID", "PassWord", "DB_name");
  2. $db->set_charset('utf8');
  3. $sql = 'INSERT INTO tbl_name (uid,name,...) VALUES ("1","テスト")';
  4. mysqli_query($db, $sql);
  5. $db->close();

 

 

関連タグ:

CPIの最新情報をTwitterでチェックできます!
@cpiadjp
次へ
前へ