Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何将错误编码的数据转换为UTF-8?_Php_Mysql_Character Encoding - Fatal编程技术网

Php 如何将错误编码的数据转换为UTF-8?

Php 如何将错误编码的数据转换为UTF-8?,php,mysql,character-encoding,Php,Mysql,Character Encoding,我正在处理来自旧mysql数据库的数据。该数据库中有一个表,其字符串列的编码设置为“cp1252西欧(拉丁语)”(与Windows-1252相同)。从mysql命令提示符查询数据时,此字段的数据表示为: Obama€™s 这个应该是读的 奥巴马的 我试着按照已被接受的答案在MySQL中将字段转换为UTF-8,但没有任何区别 我还尝试在该表中插入一个新行,使用Obama的作为该字段的文本(同样,从mysql命令提示符)。但是,当我查询刚才插入的同一行时,此文本正确表示。我尝试在字段设置为latin

我正在处理来自旧mysql数据库的数据。该数据库中有一个表,其字符串列的编码设置为“cp1252西欧(拉丁语)”(与Windows-1252相同)。从mysql命令提示符查询数据时,此字段的数据表示为:

Obama€™s

这个应该是读的

奥巴马的

我试着按照已被接受的答案在MySQL中将字段转换为UTF-8,但没有任何区别

我还尝试在该表中插入一个新行,使用
Obama的
作为该字段的文本(同样,从mysql命令提示符)。但是,当我查询刚才插入的同一行时,此文本正确表示。我尝试在字段设置为latin1和设置为UTF-8时执行该插入。同样的结果

这让我相信,当坏数据被插入数据库时,它首先是由PHP错误编码的。这就是我感到模糊的地方

我可以假设数据是通过web表单插入并用PHP处理的。PHP在将其插入数据库之前做了什么?它是否将字符串转换为UTF-8,根据,UTF-8使用三个字节
%E2%80%99
来表示
'
字符。我有这个权利吗

如果这是正确的,我可以选择什么来修复这些数据?我想将表及其字段转换为UTF-8编码,但这似乎无法修复文本。我是否必须编写一个脚本,手动将这些字符更改为它们应该是什么

select convert(binary convert(field_name using latin1) using utf8) from table_name

如果显示正确,您可以进行更新

此处描述了导致此问题的问题:。在实际发送UTF-8编码数据时,连接编码很可能设置为
latin1
。要解决这个问题,您必须说服MySQL在
latin1
中获取当前数据的字节,然后将其作为
utf8
字节插入。有一个SQL one liner
UPDATE
命令,但是现在找不到。亲爱的Brian,请接受唯一的答案,它救了我的命是的!我希望我能投10000次以上的票。这是一个简单易行的解决方案。事实上,这应该是选择的答案