こんにちは。ネットショップコンサルタントの「たぶ」(@yusuke_tanaka34)です。
今日は『ロリポップのphpMyAdminでMySQLの文字化けを修正する方法』をご紹介していこうと思います!
今回の記事は、
- ロリポップのサーバーを使っている方
- PHPでサーバーと接続しようと思っている方
- PHPの勉強を始めたばかりの方
におすすめです!
先日、PHPの勉強をしていた時に、こんな事態に遭遇しました。
そうなんです。PHPで簡単な掲示板を作って、ロリポップのサーバーにデータを送信したら、日本語が文字化けしてしまったんです。
MAMPを使ったローカル環境では、文字化けせずにうまくいっていたのですが、ロリポップのサーバーで実際に接続してみたところ、日本語が文字化けしてしまったんですよね…
いろいろ調べまくって、解決するまでに半日ぐらいかかりました。
なので、この記事を読んでいただいてるあなたには、もっと楽にMySQLの文字化けを解決して欲しいと思っています。
この記事に書いてある『ロリポップのphpMyAdminでMySQLの文字化けを修正する方法』を読めば、PHPで書いたプログラムの文字化けを解消できちゃいます!
結論から先に言ってしまうと、データベースと接続するコードを書いた後に、文字コードをセットするコードを記述します。
そんなに難しくないので、ぜひサクッと文字化けを修正しちゃってください!
それでは、実際に『ロリポップのphpMyAdminでMySQLの文字化けを修正する方法』を詳しく解説していきたいと思います。
スポンサーリンク
ロリポップのphpMyAdminでMySQLの文字化けした流れ
PHPで簡易掲示板のプログラムを作り、サーバーに接続しようと思いました。
その時、作成した簡易掲示板のPHP部分がこちら。
<?php //データベース情報の読み込み require_once("data/db_info.php"); //データベースへの接続 $db = new pdo("mysql:host=$SERV;dbname=$DBNM",$USER,$PASS); ?>
データベース情報は「data」ディレクトリの「db_info.php」にこのような形で入れました。
<?php $SERV = "サーバーのアドレス"; $USER = "ユーザー名"; $PASS = "パスワード"; $DBNM = "データベース名"; ?>
入力フォームはこのような形で作りました。
<form method="GET" action="board.php"> <input type="text" name="board" size="50"> <div><input type="submit" value="作成"></div> </form>
スレッドの名前を作成すると、作成日時とIPアドレスがデータベースに入るように設定しています。
ここでスレッドを作成すると、日本語の部分が「ã‚ã„ã‚ã„」のように文字化けしたんですよ。
いやいや、読めないですやん!(笑)
ちなみに、phpMyAdminでデータベース内を見てみても、文字化けしていました。
文字化けしていると掲示板として機能しないので、文字化けを修正しようと思います。
いろいろ試行錯誤してみたので、その修正方法をご紹介していきますね。
ロリポップのphpMyAdminでMySQLが文字化けする原因
「PHP」はサーバーサイド(サーバー側)で動くプログラミング言語。
Webブラウザから送信したデータを、PHPがサーバー側で処理し、結果をWebブラウザに返して表示されます。
たとえば、「お問い合わせフォーム」があったとします。
名前・メールアドレス・お問い合わせ内容を入力フォームに打ち込み、「送信ボタン」を押すと入力した内容がサーバーに送信されます。
送信されてきたデータをサーバーが処理し、Webブラウザへ送信します。
サーバーから送信されてきた結果が、Webブラウザに表示されるという流れです。
送信したデータが文字化けする原因は、「サーバーとプログラムの文字コードが一致していないこと」。
たとえば、プログラムの文字コードが「UTF-8」だった場合、サーバー側の文字コードも「UTF-8」である必要があります。
もしどちらかの文字コードが別の値だった場合、先ほどの「ã‚ã„ã‚ã„」のように文字化けしてしまいます。
だいたい文字化けが起こる原因は、この「プログラムとサーバーの文字コードの不一致」です。
それでは、ロリポップのphpMyAdminでMySQLの文字化けを修正する方法を見てきましょう。
スポンサーリンク
PHPの文字コードの設定を確認する
PHPが動くかどうかは、サーバーにPHPがインストールされているかどうかで決まります。
だいたいのレンタルサーバーにはPHPがインストールされていると思います。
ロリポップの場合は、「ご利用料金」のページでPHPの利用可否を確認することができます。
【ご利用料金|ロリポップ】
https://lolipop.jp/pricing/
PHPが動くことが確認できたら、PHPで書いたプログラムの任意の場所(body内)に、
<?php phpinfo(); ?>
と入力します。
【入力例】
このコードは「PHPの設定情報を確認するためのコード」です。
上記のコードをプログラム内に書き込みWebブラウザで表示すると、このように表示されます。
ここで確認する項目は、
- mbstring.language
- mbstring.internal_encoding
- mbstring.encoding_translation
の3つ。
ここが、
項目 | 値 |
---|---|
mbstring.language | Japanese |
mbstring.internal_encoding | UTF-8 |
mbstring.encoding_translation | Off |
になっていれば大丈夫です。
もし違う場合は、上記の設定に変更します。
画像では項目の値が違うので、修正します。
ちなみに、上記の項目は、
項目 | 意味 |
---|---|
mbstring.language | PHPで使う言語の初期値 |
mbstring.internal_encoding | 文字エンコーディングする初期値 |
mbstring.encoding_translation | 送られてきたデータの文字エンコーディングを検出し変換するかどうか |
という意味です。
次に、サーバー側の文字コードの設定を確認してみましょう。
サーバーの文字コードの設定を確認する
PHP側の文字コードの設定が確認できたら、次はサーバー側の文字コードの設定を確認します。
1.まず、ロリポップの管理画面にログインします。
【ロリポップのログイン画面】
https://user.lolipop.jp/
2.ロリポップの管理画面が表示されました。
3.左メニューの「サーバーの管理・設定」をクリックします。
4.ドロップダウンメニューが表示されるので、「データベース」をクリックします。
5.「データベース」のページが表示されました。
6.使用するデータベースの「操作する」ボタンをクリックします。
7.個別のデータベース情報が表示されました。
8.「phpMyAdminを開く」ボタンをクリックします。
9.phpMyAdminのログイン画面が開きました。
10.ログイン情報を入力し、「続行」ボタンをクリックします。
ログイン情報は、7番の個別のデータベース情報に記載されている項目を入力します。
11.phpMyAdminにログインしました。
まず、phpMyAdminのトップページで3つの項目を確認します。
- 「一般設定」の「サーバー接続の照合順序」
- 「外観の設定」の「言語 – Langage」
- 「データベースサーバ」の「サーバの文字セット」
1つずつ確認していきますね。
12.「一般設定」の「サーバー接続の照合順序」が「utf8_general_ci」になっているか確認します。
13.「外観の設定」の「言語 – Langage」が「日本語 – Japanaese」になっているか確認します。
ちなみに、これはphpMyAdminの表示設定ですが、念のためです、念のため…
14.「データベースサーバ」の「サーバの文字セット」が「UTF-8 Unicode(utf8)になっているか確認します。
15.問題なければ、上部メニューの「SQL」ボタンをクリックします。
16.「SQL」の入力画面が表示されます。
「SQL」の入力欄に、以下の文字を入力します。
show variables like "chara%";
17.入力したら、「実行」ボタンをクリックします。
ちなみに入力した文字(クエリ)は、「MySQLの文字コードの設定を表示する。」という意味です。
ちなみに「クエリ」とは、「データベースにデータの問い合わせや要求をすること」を言います。
18.MySQLの文字コードの設定が表示されました。
19.設定されているMySQLの文字コードはこんな感じ。
以下と同じ値になっているか確認してみてください。
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 | utf8 |
character_set_system | utf8 |
character_sets_dir | 文字セットのファイルが入っているディレクトリ |
データベースの設定で、「latin1」や「EUC-JP」という文字コードが入っている場合があるので、注意です!
「ディレクトリ」とは、パソコンで言うところの「フォルダ」のこと。サーバーでは「ディレクトリ」と呼びます。
ちなみに、各項目の意味はこんな感じ。
Variable_name | Value |
---|---|
character_set_client | ブラウザから送信したSQL文の文字コード。 |
character_set_connection | ブラウザから送信された文字コードを変換する文字コード。 |
character_set_database | データベースで使用されている文字コード。 |
character_set_filesystem | ファイルシステムの文字コード。「binary」の場合は、変換しないという意味。 |
character_set_results | 指示した結果やエラーメッセージをブラウザに送るための文字コード。 |
character_set_server | サーバーの初期値の文字コード |
character_set_system | 識別子を保管するためにサーバーで使用されている文字コード。常に「utf8」。 |
character_sets_dir | 文字コードのファイルが入っているディレクトリの場所 |
データベースの文字コードの設定を確認する
サーバーの文字コードの設定が大丈夫であれば、データベースの文字コードの設定も大丈夫だと思いますが、念のため確認しておきましょう。
1.phpMyAdminの左側にある使用するデータベース名をクリックします。
2.データベースのカラム構造が表示されました。
「カラム」とは、データを入れる箱のようなもののこと。
ここでその「カラム」の設定を確認することができます。
3.各カラムの「照合順序」が「utf8_general_ci」になっているか確認します。
ちなみに、この「照合順序」とは、「データに入っている文字の識別を行うための基準」のことを言います。
データベースでは、入っているデータをソート(並べ替えること)することが頻繁にあります。
その時に、基準となる法則が「照合順序」です。
たとえば、「あ」と「ア」と「ア」だったら、どういう順番で並ぶかという法則が決められています。
ちなみに、MySQLの初期値は「utf8_general_ci」です。
4.「照合順序」に問題がなければ、上部メニューの「SQL」ボタンをクリックします。
5.「SQL」を入力する画面が表示されました。
先ほどと同じ、以下のクエリを入力します。
show variables like "chara%";
「クエリ」とは「データベースにデータの問い合わせや要求をすること」のことを言います。
ここで入力したクエリは、「MySQLの文字コードの設定を表示する。」という指示です。
6.クエリを入力したら、「実行」ボタンをクリックします。
7.データベースの文字コードの設定が表示されました。
以下の値と同じになっていれば問題ありません。
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 | utf8 |
character_set_system | utf8 |
character_sets_dir | 文字セットのファイルが入っているディレクトリ |
各項目の意味は上記に記載しているので、興味のある方は上にスクロールしてご覧ください。
ちなみに「ディレクトリ」とは、パソコンで言うところの「フォルダ」のことを言います。
以上、「サーバーの文字コードの設定を確認する方法」でした。
スポンサーリンク
ロリポップのphpMyAdminでMySQLの文字化けを修正する方法
それでは、「ロリポップのphpMyAdminでMySQLの文字化けを修正する方法」を解説していきたいと思います。
「ロリポップのphpMyAdminでMySQLの文字化けを修正する方法」は、以下の3つ。
- ロリポップの管理画面からphp.iniの設定を変更する
- PHPプログラムに打ち込んでPHPの設定を変更する
- 「.htaceess」でPHPの設定を変更する
それでは、「ロリポップのphpMyAdminでMySQLの文字化けを修正する」3つの方法を解説していきますね。
ロリポップの管理画面からphp.iniの設定を変更する
それではまず、一番簡単な「ロリポップの管理画面からphp.iniの設定を変更する」方法を解説していきます。
1.先ほどと同様、ロリポップの管理画面にログインします。
【ロリポップのログイン画面】
https://user.lolipop.jp/
2.ロリポップの管理画面が表示されます。
3.左メニューにある「サーバーの管理・設定」をクリックします。
4.ドロップダウンメニューの「PHP設定」をクリックします。
5.「PHP設定」のページが表示されました。
6.使用しているドメインの「php.ini」にある「設定」ボタンをクリックします。
7.「php.ini設定」のページが表示されました。
8.「mbstring関連」の各項目を下記の値に変更します。
設定項目 | 設定内容 |
---|---|
mbstring.language | Japanese |
mbstring.internal_encoding | UTF-8 |
mbstring.encoding_translation | Off |
9.また、念のため「そのほか」の「default_charset」も確認してください。
値が「UTF-8」ではない場合、「UTF-8」に変更してください。
設定項目 | 設定内容 |
---|---|
default_charset | UTF-8 |
以上で、「ロリポップの管理画面からphp.iniの設定を変更する」は終了です。
お疲れ様でした。
PHPプログラムに打ち込んでPHPの設定を変更する
次に、「PHPプログラムに打ち込んでPHPの設定を変更する」方法を解説していきますね。
上記の「ロリポップのphpMyAdminでMySQLの文字化けした流れ」に掲載した「PHP部分」に、文字コードを指定するコードを記述します。
記述するコードは、
mysqli_set_charset('utf8');
このコードを、「データベースの接続」の下に記述してください。
//データベースへの接続 $db = new pdo("mysql:host=$SERV;dbname=$DBNM",$USER,$PASS); mysqli_set_charset('utf8');
この記述で、文字コードを指定しています。
これをやってみて文字化けが治らなかったら、こちらのコードを記述してみてください。
mysqli_set_charset($db, "utf8");
打ち込むとこんな感じ。
//データベースへの接続 $db = new pdo("mysql:host=$SERV;dbname=$DBNM",$USER,$PASS); mysqli_set_charset($db, "utf8");
これで文字化けが治っているはず!
ちなみに、こちらのコードはPHP7に対応できるように「mysqli関数」を使用しています。
PHP5までだと「mysql関数」を使用することが多いです。
もしも上記のコードでダメだった場合は、最終手段です!
下記のコードを挿入します。
$enc = 'utf8'; $db->query(" set character_set_client = {$enc};"); $db->query(" set character_set_connection = {$enc};"); $db->query(" set character_set_database = {$enc};"); $db->query(" set character_set_results = {$enc};"); $db->query(" set character_set_server = {$enc};"); $db->query(" set character_set_system = {$enc};");
打ち込むとこんな感じ。
//データベースへの接続、データベース選択 $db = new pdo("mysql:host=$SERV;dbname=$DBNM",$USER,$PASS); $enc = 'utf8'; $db->query("set character_set_client = {$enc};"); $db->query("set character_set_connection = {$enc};"); $db->query("set character_set_database = {$enc};"); $db->query("set character_set_results = {$enc};"); $db->query("set character_set_server = {$enc};"); $db->query("set character_set_system = {$enc};");
この方法では、データベースの設定自体を変更するのではなく、今回の処理で使う文字コードを指定しています。
僕の場合は、だいたいこの方法で、文字化けが修正できました。
レンタルサーバーでは、MySQLを直接いじったり、設定ファイルを書き換えたりすることができない場合が多いので、今回のようにPHPプログラムへの記述で修正します。
「.htaceess」でPHPの設定を変更する
最後に、「.htaceess」でPHPの設定を変更する方法について解説していきます。
『「.htaceess」ってなに?』という場合は、こちらの記事をご覧ください。
基本的には、上記の2つの方法で文字化けが直るはずです。
もし、どうしても直らない場合は、こちらの方法も試してみてください。
「.htaccess」は記述ミス等があると、Webサイトが表示されなくなります。
まずは「.htaccess」のバックアップを取ってから作業を行いましょう。
もしWebサイトが表示されなくなっても、「.htaccess」を元のファイルに戻せば表示されるようになりますので、焦らずに対処しましょう。
それでは、下記のコードを「.htaccess」に貼り付けて、サーバーにアップロードします。
php_value mbstring.language "Japanese" php_value mbstring.internal_encoding "UTF-8" php_flag mbstring.encoding_translation off php_value default_charset "UTF-8"
この方法は、「.htaccess」から文字コードを指定する方法です。
簡単な方法ではありますが、Webサイトが表示されなくなる可能性もありますので、まずは上記の2つの方法を試してみましょう。
以上、3つが「ロリポップのphpMyAdminでMySQLの文字化けを修正する方法」でした!
スポンサーリンク
まとめ
今回は『ロリポップのphpMyAdminでMySQLの文字化けを修正する方法』というテーマでお送りしてきました。
ロリポップのphpMyAdminでMySQLの文字化けする原因は、
サーバーとプログラムの文字コードが一致していないこと
でした。
ロリポップのphpMyAdminでMySQLが文字化けしたら、まずは
- PHPの文字コードの設定を確認する
- サーバーの文字コードの設定を確認する
をしてみましょう。
もしPHPやサーバーの文字コードの設定が「UTF-8」になっていなかったら、
- ロリポップの管理画面からphp.iniの設定を変更する
- PHPプログラムに打ち込んでPHPの設定を変更する
- 「.htaceess」でPHPの設定を変更する
の3種類の方法で修正します。
以上が『ロリポップのphpMyAdminでMySQLの文字化けを修正する方法』でした。
PHPやMySQLについて、他にも分からないことがありましたら、こちらの記事もおすすめです。