php - 我从 MySQL 数据库中提取数据时出现奇怪的字符

标签 php mysql character-encoding

好吧,我有一个 MySQL 数据库,编码为 utf8_unicode_ci,它在当前应用程序(用 Code Igniter 编写)中运行起来非常棒

现在,我正在开发一个新的 PHP 应用程序,当我尝试恢复数据时,有几个字符不可读 - 使用 phpMyAdmin,字符在数据库中显示正常,但是当我尝试将其放在网页中时,它变得像“ROLA �60”。

这些字符是西类牙文字母,例如 ñ、á、Ó... 或 ASCII 代码,例如 €、Ø...

问题出在哪里?我已经将页面设置为 meta http-equiv="Content-Type"content="text/html; charset=UTF-8",我已经尝试了 mysql_set_charset() 函数,但仍然什么都没有。

有遇到过这类问题吗?

最佳答案

我在我的数据库驱动的应用程序中注意到了这个确切的问题,我花了很长时间才解决它!

出现这个问题是因为你的应用程序中至少有三个地方需要定义它们的字符集,并且它们必须都是相同的字符集(并且该字符集必须能够处理你正在处理的字符)。

当浏览器不理解传递的是什么字符时,就会出现问号符号及其变体。

确保您的字符集在以下位置匹配:

  1. HTML 头部部分。
  2. 数据库排序规则本身 - 这可以在您创建新表或更改现有表的架构时在 phpMyAdmin 中设置。
  3. 最容易被忽视的字符集设置:php.ini 文件的“default_charset”值(可以通过 PHP 脚本或 httpd.conf 文件设置)。

从您的帖子来看,您的 PHP 配置可能设置为使用不同的 default_charset。这意味着您的数据库将很好地存储字符,并将这些字符很好地发送到您的脚本,但是 PHP 脚本本身不知道如何处理该字符,因此将作为烦人的问号符号输出到浏览器.

尝试将 php.ini 值更改为相同的字符集,您可能会惊讶地看到字符显示正常!如果您无权访问 php.ini,则可以使用以下函数更改值:

ini_set("default_charset", "UTF-8");

希望这对您有所帮助。

关于php - 我从 MySQL 数据库中提取数据时出现奇怪的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3617499/

相关文章:

php - 守护程序中的 Doctrine2 连接超时

php - jQuery 不在选择上加载数据

php - 如何在 Laravel 中查询的 WHERE 子句中使用正则表达式?

从netbeans到mysql的java连接问题

mysql - 创建 View 时出错

.NET 内部编码

php - 远程 MySQL 连接问题 - 与 MySQL 服务器的连接丢失 (110)

mysql - group by 搞乱了我的 mysql 计数

c - 为什么 printf( "%c", 1) 返回笑脸而不是 1 的编码字符

javascript - 接收和解释内容类型为应用程序/八位字节流的十六进制数据发送时出错