PHP中的ISO-8859-1到UTF-8字符集转换

PHP中的ISO-8859-1到UTF-8字符集转换,php,utf-8,character-encoding,Php,Utf 8,Character Encoding,我必须从一个数据库导入数据,其中使用的字符编码是ISO-8859-1,我们使用的新站点使用UTF-8。从中提取数据的站点是旧的,因此我认为它仍然在ISO中 我尝试了以下解决方案,但没有结果: iconv 然而,在它发表了一篇 2008年3月提出的规则将 政府已经完全禁止了这些物品 邮政部门收到了许多邮件 反对其计划行动的评论 主要有四个原因:(1)经济衰退 最初的语言含糊不清,过于夸张 广泛,因此邮政服务 将“弹药”一词改为 爆炸装置,一些 被调查者质疑,这样的结果是否正确 问题甚至存在,尽管

我必须从一个数据库导入数据,其中使用的字符编码是ISO-8859-1,我们使用的新站点使用UTF-8。从中提取数据的站点是旧的,因此我认为它仍然在ISO中

我尝试了以下解决方案,但没有结果:

iconv

然而,在它发表了一篇 2008年3月提出的规则将 政府已经完全禁止了这些物品 邮政部门收到了许多邮件 反对其计划行动的评论 主要有四个原因:(1)经济衰退 最初的语言含糊不清,过于夸张 广泛,因此邮政服务 将“弹药”一词改为 爆炸装置,一些 被调查者质疑,这样的结果是否正确 问题甚至存在,尽管 邮政服务部门说它已经记录了 涉及该公司的多起事件 发现的邮件显示 可能的特征 炸药——拟议规则(3) 据说违反了第二条 修订,以及(4)邮政服务 缺乏禁止邮寄的权力 这类物品的数量

然而,在它发表了一篇 2008年3月提出的规则将 政府已经完全禁止了这些物品 邮政部门收到了许多邮件 反对其计划行动的评论 主要有四个原因:(1)经济衰退 最初的语言含糊不清,过于夸张 广泛,因此邮政服务 更改了“弹药”一词 至爆炸装置(2) 一些受访者质疑 然而,这样的问题甚至存在 邮政部门说它已经 Ãœœ记录了许多事件 涉及发现 表现出可能的特征 炸药(3)拟议规则 据说违反了第二条 修订,以及(4)邮政服务 缺乏禁止邮寄的权力 这类物品的数量

mb\u转换\u编码

与上面相同的精确结果

utf8\u编码

与上面相同的精确结果

utf8\u解码

用所有的?替换:

然而,在它发表了一篇 2008年3月提出的规则将 政府已经完全禁止了这些物品 邮政部门收到了许多邮件 反对其计划行动的评论 主要有四个原因:(1)经济衰退 最初的语言含糊不清,过于夸张 广泛,因此邮政服务 换了个词?军火?到 ?爆炸装置,?(2) 一些 被调查者质疑,这样的结果是否正确 问题甚至存在,尽管 邮政局说有记录 涉及该公司的多起事件 发现的邮件显示 可能的特征 炸药,?(3) 拟议规则 据说违反了第二条 修订,以及(4)邮政服务 缺乏禁止邮寄的权力 这类物品的数量


不太清楚在这里该做什么

任何帮助都将不胜感激


谢谢

那不是ISO 8859-1,那是Windows代码页1252:

>>> a=u'“'
>>> print a.encode('cp1252').decode('utf-8')
“
>>>

你必须非常彻底地处理这件事。在数据库和web浏览器之间,有许多地方的编码可能会被弄脏

  • 数据库服务器的字符集和排序规则字符集
  • 数据库的字符集和排序规则字符集
  • 数据库的连接和排序规则字符集
  • 每个数据库表的字符集和排序规则字符集
  • 在各种PHP函数中(如htmlentities)
  • HTTP内容类型
其中任何一个都可能是罪魁祸首。您可能已成功地将数据从ISO-08859-1转换为UTF-8,但这并不意味着您正在对其进行操作或正确显示

要检查数据库内容(表特定设置除外),请运行此查询

select @@character_set_server
     , @@collation_server
     , @@character_set_database
     , @@collation_database
     , @@character_set_client
     , @@character_set_connection
     , @@collation_connection
     , @@character_set_results
;
检查表中的CREATE语句以获取该信息(如果需要帮助,可以将其复制/粘贴到问题中)

要解决HTTP内容类型(即,输出字符编码),请确保在输出之前的某个地方在PHP中有此内容

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

最后,如果这没有帮助,请给我们更多的细节。您在iconv中使用了哪些参数?

您给我的查询结果如下:

拉丁语拉丁语瑞典语ci
拉丁语拉丁语瑞典语ci
拉丁语1拉丁语1
拉丁语和瑞典语 拉丁语1

至于PHP文件开头的默认字符集,它适用于某些数据,但不是所有数据


不管怎样,还是在这里查看。

有时您必须为iconv指定正确的参数。你能说得更具体一点吗?从MySQL到PostgreSQL也有类似的问题,因为ISO-8859-1文本中存在UTF-8字符(由于复制了粘贴)。你是否声明以UTF-8编码的形式发送输出?工作完美——ini_集('default_charset','UTF-8');谢谢你,先生!