gpt4 book ai didi

php - Utf-8 字符显示为 ISO-8859-1

转载 作者:可可西里 更新时间:2023-11-01 07:19:25 25 4
gpt4 key购买 nike

我在从数据库中插入/读取 utf8 内容时遇到问题。我所做的所有验证似乎都表明我的数据库中的内容应该是 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 的内容类型 header ):

ini_set('default_charset', 'ISO-8859-1');

此测试表明内容以拉丁文形式出现。我不明白为什么。有人知道吗?

谢谢。

最佳答案

好吧,我发现 SET NAMES 并不是那么好用。在 the docs 取顶...

我通常做的是执行 4 个查询:

SET CHARACTER SET 'UTF8';
SET character_set_database = 'UTF8';
SET character_set_connection = 'UTF8';
SET character_set_server = 'UTF8';

试一试,看看是否适合您...

哦,请记住,所有 <= 127 的 UTF-8 字符也是有效的 ISO-8859-1 字符。因此,如果您在流中只有 <= 127 个字符,mb_detect_encoding 将落在较高流行的字符集(默认情况下为“UTF-8”)...

关于php - Utf-8 字符显示为 ISO-8859-1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3311243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com