[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 メーリングリストの案内