PHPとMySQLの構成における日本語文字化けをPHPで対策する方法

PHP 5.4.xとMySQL(5.6.20)の構成で、PHPから日本語をデータベース内に保存したところ、phpMyAdmin上でその日本を見ると文字化けしてしまいました。逆に、phpMyAdmin上で入力した日本語はPHPからクエリして表示すると「???」になってしまいハマった対策を残します。尚、データベースに入出力した以外の日本語文字列は問題ありませんでした。

これが発生した環境は、XAMPP、NetBeasn、PHPファイルともにUTF-8を扱えるように設定済み、MySQL内のデータベースは、照合順序は「utf8_unicode_ci (UNICODE(多言語)、大文字小文字を区別しない)」で作成したデータベースといった環境です。

専用サーバーであればMySQLのmy.confを編集して修正するのが簡単ですが、共用サーバーとなるとその方法での対策は難しいのでPHP側で対策する方法を紹介します。

 

≪対策≫

クライアントの文字セットをmysql_set_charset関数を利用してUTF-8に設定すれば良い。

// データベースに接続
$link = mysql_connect('localhost', 'root', '');
// クライアントの文字セットを設定
mysql_set_charset('utf8', $link);

※上記サンプルはエラー処理は考慮されていません。

 

ただし、PHPマニュアルによるとこの方法はPHP 5.5.0より下図の通り非推奨になったとのこと。

PHP 5.5.0以降で開発する場合は、紹介されている代替の方法を採用してください。

mysql_set_charset

 

≪注意≫

この対策をネット調査している際に、データベースに対し、


SET NAMES UTF8

とクエリを実行して文字セットを変更したら日本語の文字化けが解消したと対策を紹介されています。

確かにこの方法でも対策は出来、以前はこの方法が一般的だったようですが、SQLインジェクションの脆弱性があることが判明しているので推奨されません。

 

Read More

WindowsにおけるPHP開発環境の構築

PHPでアプリケーションをWindows上で開発するため環境を構築します。

 

ローカル環境で、PHPのコーディングから実行、デバッグを行うには以下のソフトウェアが必要です。

PHP自体は、テキストファイルなので最低メモ帳等のテキストエディタがあればコーディングは出来ますし、あとWebサーバーとブラウザがあれば実行できます。ただ、開発効率を考えたとき、よっぽどの理由がない限り、統合開発環境(IDE)も合わせて導入することを強くおすすめします。

◎Webサーバー (Apache)

◎PHP

△DBサーバー (MySQL)

△統合開発環境(IDE)

(◎:必須、△:任意)

 

いろいろと調査した結果、XAMPP(ザンプ) + NetBeansという組み合わせを採用することにしました。

 

XAMPPに関してはPHP開発環境を構築する上でこれをインストールしておけば間違いないという鉄板の必須ソフトウェアです。

XAMPPはWindows用で、Linux用にはLAMP(ランプ)、Mac OS X用にはMAMP(マンプ)とOS別にパッケージが提供されています。

通常、Apache、PHP、MySQL等は個別インストールが必要ですが、XAMPPを使うとそれらを一括インストール出来るので非常に便利です。

配布先のApache Friendsの言葉を引用すると、XAMPPとは以下の様なソフトウェアです。

 

XAMPP とは?
XAMPP は最も人気のある PHP 開発環境です。

XAMPP は、完全に無償で MySQL、PHP、および Perl を含んだ、簡単にインストールできる Apache ディストリビューションです。

XAMPP オープン ソース ・パッケージは、インストールと利用が非常に簡単できるよう設定されています。

 

なぜ XAMPP を使うのか?
・最も人気のある PHP dev パッケージであること
・Windows、Mac OS X & Linux をサポート
・インストールと設定が簡単
・完全に無償

 

一方、統合開発環境(IDE)ですが、数あるIDEの中から最終的にNetBeasnを選択しました。

優秀な有償のPHP用の統合開発環境(IDE)もありましたが、導入コストは押さえたいので無償の統合開発環境(IDE)という観点で選択しました。

本業では、MicsoftのVisual Studioを利用しているので、それが使えれば慣れた環境で良かったのですが、Visual StudioでPHPを開発するための拡張機能「PHP Tools for Visual Studio」は無料のExpressエディションには導入不可。また、PHP Tools for Visual Studioは無償のBASICと有償のPROFESSIONALに2つのエディションがあり、BASICエディションでは構文の色分け(シンタックスハイライト)機能といった基本的な機能しか使えず、PROFESSIONALエディションでないと補完機能が利用できない等の理由で却下しました。

Javaの開発環境として有名な拡張性の高いEclipseも有力候補でしたが、NetBeasnの方が補完機能が優れる、軽量動作、公式の日本語サイトが存在し公式資料が数多く提供されている等の理由で、NetBeansを選択しました。

 

各ソフトウェアは以下より無償でダウンロードすることが出来ます。

XAMPP

NetBeans ※PHPのNetBeansバンドルをダウンロードしてください。

 

[XAMPPインストールメモ]

XAMPP ※v1.8.3のインストーラーの場合

・Antivirusの確認画面は[OK]を押す。

・User Account Control(UAC)の警告画面は[Yes]を押す。

・Select Componentsウィザードでは下図の通りコンポーネントを選択する。

XAMPP Installation Select Components

・Installation folderウィザードでは、デフォルトの「C:\xampp」のまま利用。

・Bitnami for XAMPPウィザードでは、[Learn more about Bitnami for XAMPP]のチェックを外す。

・インストール後、<XAMPPインストールフォルダー>\php\php.iniを以下の通り編集する。

≪タイムゾーン設定≫

「date.timezone=Europe/Berlin」 ⇒ 「date.timezone=Asia/Tokyo」

≪日本語関係設定≫

「;default_charset = “UTF-8″」 ⇒ 「default_charset = “UTF-8″」

「;mbstring.language = Japanese」 ⇒ 「mbstring.language = Japanese」

「;mbstring.internal_encoding = EUC-JP」 ⇒ 「mbstring.internal_encoding = UTF-8」

≪Xdebug設定≫

「;zend_extension = “C:\xampp\php\ext\php_xdebug.dll」 ⇒ 「zend_extension = “C:\xampp\php\ext\php_xdebug.dll”」

≪リモートデバッグ設定≫

「;xdebug.remote_enable = 0」 ⇒ 「xdebug.remote_enable = 1」

≪FileInfo拡張モジュール設定≫

「;extension=php_fileinfo.dll」 ⇒ 「extension=php_fileinfo.dll」

・ ApacheとSkypeが共存する場合、Skype初期設定ではポート80を利用するようになっているためApacheの起動が失敗する。この場合、Skypeの設定画面を開き[詳細]-[接続]の[追加の受信接続にポート80と443を使用]のチェックを外しSkypeを再起動する。これで、ポート80が空くのでApacheが起動可能となる。尚、ポート80をIISやWindowsが利用している場合もApacheの起動に失敗するので、どちらかのポート番号を変更する等の対応が必要となる。

・XAMPPのphpコマンド(php.exe)をコマンドプロンプトでフルパス指定しなくても使えるように「C:\xampp\php\」をシステム環境変数のPathへ追加する。

 

NetBeans

・NetBeansのインストールにはJava Platform (JDK)のインストールが必要。

・NetBeansのインストール手順はNetBeansの公式サイトにバージョン毎に公開されています。

・基本的に、インストールウィザードに従い全てデフォルトのインストールオプションでインストールを完了します。

・日本語の文字化け対策として、NetBeansのデフォルトのエンコーディングをUTF-8へ変更します。NetBeansが起動していない状態で、<NetBeansインストールフォルダ>\etc\netbeans.confを開き、netbeans_default_options に 下図の赤枠内のように「-J-Dfile.encoding=UTF-8」を追記し保存します。

NetBeans_DefaultEncoding

 

Read More