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

时间:2010-01-06 17:59:21

标签: php utf-8 character-encoding

我必须从数据库导入数据,其中使用的字符编码是ISO-8859-1,而我们使用的新网站使用的是UTF-8。数据被拉出的网站是旧的,因此我认为它仍然是ISO的原因。

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

的iconv

  

然而,在它发表之后   拟于2008年3月提出的规则   完全禁止这些物品,   邮政服务收到了很多   反对其计划行动的评论   主要有四个原因:(1)   原始语言含糊不清   广泛的,所以邮政局有   将“弹药”改为“   “爆炸装置”,(2)一些   受访者质疑是否这样   问题甚至存在,尽管如此   邮政服务表示已经“记录”   涉及的众多事件   发现展出的邮件   可能的特征   爆炸物, - (3)拟议的规则   据说违反了第二个   修正案,以及(4)邮政服务   缺乏禁止邮寄的权力   这些物品。

  

然而,在它发表之后   拟于2008年3月提出的规则   完全禁止这些物品,   邮政服务收到了很多   反对其计划行动的评论   主要有四个原因:(1)   原始语言含糊不清   广泛的,所以邮政局有   改变了✜munitions⢠  到’的爆炸装置,â(2)   一些受访者质疑是否   但是,这个问题甚至存在   邮政局说它有   â€œ记录了许多事件   涉及邮件的发现   表现出可能的特征   爆炸物,¢(3)拟议的规则   据说违反了第二个   修正案,以及(4)邮政服务   缺乏禁止邮寄的权力   这些物品。

mb_convert_encoding

与上述完全相同的结果。

函数utf8_encode

与上述完全相同的结果。

utf8_decode

用所有的结果拉回一个有趣的结果?替换:

  

然而,在它发表之后   拟于2008年3月提出的规则   完全禁止这些物品,   邮政服务收到了很多   反对其计划行动的评论   主要有四个原因:(1)   原始语言含糊不清   广泛的,所以邮政局有   改变了这个词?弹药?至   ?爆炸装置,? (2)一些   受访者质疑是否这样   问题甚至存在,尽管如此   邮政服务表示它有记录   涉及的众多事件   发现展出的邮件   可能的特征   炸药,? (3)拟议规则   据说违反了第二个   修正案,以及(4)邮政服务   缺乏禁止邮寄的权力   这些物品。


不完全确定该怎么做。

任何帮助将不胜感激!

谢谢!

3 个答案:

答案 0 :(得分:1)

你必须对此非常彻底。在数据库和Web浏览器之间,有许多位置,编码可能会被污染。

  • 数据库服务器的charset和collat​​ion charset
  • 数据库的charset和collat​​ion charset
  • 数据库的连接和排序规则字符集
  • 每个数据库表的charset和collat​​ion charset
  • 在各种PHP函数(例如htmlentities)中
  • HTTP Content-Type

其中任何一个都可能是罪魁祸首。您可能已成功将数据从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 Content-Type(即输出字符编码),请确保在输出之前的某个地方有这个

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

最后,如果这没有帮助,请给我们一些更多细节。您使用iconv的参数是什么?

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

您给我的查询的输出是:

latin1 latin1_swedish_ci
latin1 latin1_swedish_ci
latin1 latin1
latin1_swedish_ci
LATIN1

对于在PHP文件开头设置的默认字符集,它适用于某些数据,但不适用于所有数据。

无论如何,仍然在这里查看。