[PHP-users 26789] mysql_real_escape_stringとutf-8について
Naoki OKUMURA
okumura @ laurus.co.jp
2005年 9月 6日 (火) 16:57:07 JST
はじめまして奥村と申します。よろしくお願いします。
--環境--
Fedora Core 4
Apache 2.0.54
PHP 5.0.4
MySQL 4.1.14
Apache,PHP,MySQLはソースからコンパイルして使っています。
PHPのコードはUTF-8で書いています。
まず現象について簡単に説明すると、
echo mysql_real_escape_string("プレースホルダ");
とすると「\プ\レースホ\ルダ」と日本語文字列がエスケープされてしまいます。
これと同じコードを
Windows XP
Apache 2.0.54
PHP 5.0.4
MySQL 4.1.13-nt
の環境で実行すると、「プレースホルダ」となり問題ありません。
改良版MySQL拡張サポート(mysqli)のmysqli_real_escape_stringも試してみましたが
ダメでした。
http://www.php.net/manual/ja/ref.mysql.phpに
注意: latin (デフォルト)以外の文字セットを必要とする場合、 使用する文字セットのサポートを有効にしてコンパイルした(バンドル版でない) libmysqlをインストールする必要があります。
とあるのですが、libmysqlの再コンパイルの方法がわからないので試せていません。
また、MySQLのコンパイルオプションに--with-character-setにutf8,ujis,binaryを試してみましたが
ダメでした。
mysql_real_escape_stringを使わなければいいのですが
PEAR DB のプレースホルダを使用する場合、自動的に使われてしまいます。
現時点でPEAR DB のプレースホルダを使用しなければならない訳ではないのですが
解決しておきたいと思い、投稿させてもらいました。
よろしくお願いします
-----
奥村@ローラス(株) ソリューション事業G ソリューション開発部
Tel 06(6121)7350 Fax 06(6121)7352 okumura @ laurus.co.jp
PHP-users メーリングリストの案内