データベースからの utf8 コンテンツの挿入/読み取りに問題があります。私が行っているすべての検証は、DB のコンテンツが utf8 でエンコードされている必要があることを示しているようですが、ラテン語でエンコードされているようです。データは、最初に CLI の PHP スクリプトからインポートされます。
構成:
Zend Framework Version: 1.10.5
mysql-server-5.0: 5.0.51a-3ubuntu5.7
php5-mysql: 5.2.4-2ubuntu5.10
apache2: 2.2.8-1ubuntu0.16
libapache2-mod-php5: 5.2.4-2ubuntu5.10
検証:
-mysql:
mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| 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 | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_bin |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
-データベース
created with
CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_bin;
CREATE SCHEMA `mydb` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin ;
mysql> status;
--------------
mysql Ver 14.12 Distrib 5.0.51a, for debian-linux-gnu (i486) using readline 5.2
Connection id: 7
Current database: mydb
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.0.51a-3ubuntu5.7-log (Ubuntu)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /var/run/mysqld/mysqld.sock
Uptime: 9 min 45 sec
-sql: 挿入を行う前に、
SET names 'utf8';
-php: 挿入を行う前に、utf8_encode()とmb_detect_encoding()を使用して、'UTF-8' を取得します。db からコンテンツを取得した後、ユーザーに送信する前に mb_detect_encoding() も 'UTF-8' を返します
検証テスト:
コンテンツを適切に表示する唯一の方法は、コンテンツ タイプをラテン語に設定することです (トラフィックをスニッフィングすると、ISO-8859-1 のコンテンツ タイプ ヘッダーが表示されます)。
ini_set('default_charset', 'ISO-8859-1');
このテストは、コンテンツがラテン語として出力されることを示しています。理由がわかりません。誰にもアイデアはありますか?
ありがとう。