PHPでMySQLデータベースでPDOライブラリを使用していますが、アラビア語のようにUTF-8でエンコードされたデータを挿入すると、データベースに挿入されますが、?????????
です。PDO + MySQLと壊れたUTF-8エンコーディング
私自身のフレームワークでは、PDO接続を作成した後、SET NAMES utf8
とSET CHARACTER SET utf8
という2つのクエリを送信します。それでも動作しません。
例:
loadclass('PDO', array(
sprintf(
'mysql:host=%s;port=%s;dbname=%s',
confitem('database', 'host'),
confitem('database', 'port'),
confitem('database', 'name')
),
confitem('database', 'username'),
confitem('database', 'password'),
array('PDO::ATTR_PERSISTENT' => confitem('database', 'pconnect'))
));
$this->query('SET NAMES ' . confitem('database', 'charset'));
$this->query('SET CHARACTER SET ' . confitem('database', 'charset'));
回避策:json_encode
関数がデータベースに挿入する前にデータを変換し、フェッチした後、それを復号するjson_decode
を使用します。これが今私がやる方法です。
これはPHPの問題ではないと確信していますか? mbstringがインストールされていることを確認しますか? – Rahly
私は同じ文字列を送り返して、それが大丈夫かどうかを確認することをお勧めします。テストのように。 – s3v3n
confitem( 'database'、 'charset')の値は何ですか? –