Php 从mysql数据库提取字符编码时出现问题

Php 从mysql数据库提取字符编码时出现问题,php,mysql,character-encoding,Php,Mysql,Character Encoding,可能重复: 好吧,这太愚蠢了,我搞不懂 Mysql数据库设置为utf8\u常规\u ci排序规则。我遇到问题的领域是长文本类型 作为é添加到数据库的字符或其他重音字符返回为�. 我通过stripslashes运行输出,并尝试了使用和不使用html\u entity\u decode两种方法,但在输出中没有发现任何变化。我做错了什么 干杯您尝试插入的字符串编码是什么?如果它在ISO-8859-1中,您可以使用PHP函数utf8_encode()将其编码为UTF-8,然后再将其插入数

可能重复:

好吧,这太愚蠢了,我搞不懂

Mysql数据库设置为utf8\u常规\u ci排序规则。我遇到问题的领域是长文本类型

作为
é
添加到数据库的字符或其他重音字符返回为�.

我通过
stripslashes
运行输出,并尝试了使用和不使用
html\u entity\u decode
两种方法,但在输出中没有发现任何变化。我做错了什么


干杯

您尝试插入的字符串编码是什么?如果它在ISO-8859-1中,您可以使用PHP函数utf8_encode()将其编码为UTF-8,然后再将其插入数据库


正确编码真的很棘手-层太多了:

  • 浏览者
  • 页面
  • PHP
  • MySQL
PHP中的SQL命令“SET CHARSET utf8”将确保客户端(PHP)将以utf8格式获取数据,无论这些数据如何存储在数据库中。当然,首先需要正确存储它们

DDL定义与真实数据 为表/列定义的编码实际上并不意味着数据采用该编码。如果您碰巧有一个表被定义为
utf8
,但存储为不同的编码,那么MySQL会将它们视为
utf8
,您就有麻烦了。这意味着你必须先解决这个问题

检查什么 您需要检查每个层的数据流编码

  • 检查HTTP头,头
  • 检查请求主体中真正发送的内容
  • 别忘了MySQL几乎无处不在:
    • 数据库
    • 桌子
    • 纵队
    • 服务器作为一个整体
    • 客户
      确保到处都有合适的
转变 如果您在例如
windows-1250
中接收数据,并希望存储在
utf-8
中,则在存储之前使用此SQL:

SET NAMES 'cp1250';
如果数据库中的数据为
windows-1250
,并且希望检索
utf8
,请使用:

SET CHARSET 'utf8';
最后一点:
不要依赖太“聪明”的工具来显示数据。例如,phpMyAdmin(在我使用它时)的编码非常糟糕。它穿过所有的层,所以很难找到。此外,Internet Explorer还有一种非常愚蠢的行为,即根据奇怪的规则“猜测”编码。使用可以切换编码的简单编辑器。另外,我推荐MySQL Workbench。

另外,+1,我会在每次需要真正理解它时添加它,以获得正确的编码。如果一个人只是根据某个特定的情况按照记忆中的指令而不理解,那么编码问题迟早会出现。不幸的是,cargo cult编程没有任何进展。