在PHP中将ISO8859-1转换为UTF-8时出现问题

在PHP中将ISO8859-1转换为UTF-8时出现问题,php,mysql,utf-8,character-encoding,apostrophe,Php,Mysql,Utf 8,Character Encoding,Apostrophe,我试图转换一个取自MySQL数据库的ISO8859-1字符串,并使用php将其转换为UTF-8。然而,当我使用utf8_encode函数时,它几乎从字符串中删除了所有撇号(例外情况似乎在html字段中) 谢谢一种可能是使用Iconv。我以前用过,很好 它有一个TRANSLIT选项,可以近似字符。您的“ISO-8859-1”内容可能不是ISO-8859-1 当你说内容类型:text/html;charset=iso-8859-1,浏览器实际上并不使用iso-8859-1,原因是恼人的历史原因。他

我试图转换一个取自MySQL数据库的ISO8859-1字符串,并使用php将其转换为UTF-8。然而,当我使用utf8_encode函数时,它几乎从字符串中删除了所有撇号(例外情况似乎在html字段中)


谢谢

一种可能是使用Iconv。我以前用过,很好


它有一个TRANSLIT选项,可以近似字符。

您的“ISO-8859-1”内容可能不是ISO-8859-1

当你说
内容类型:text/html;charset=iso-8859-1
,浏览器实际上并不使用iso-8859-1,原因是恼人的历史原因。他们实际上使用的是Windows代码页1252(西欧),这与ISO-8859-1非常相似,但不同

特别是,0x80-0x9F范围内的字节表示ISO-8859-1中不可见且很少使用的控制代码。但cp1252在这个范围内增加了一些印刷细节和其他扩展,包括“智能引号”。在MS Word中编写撇号时,它会将其更改为单个面向左侧的智能引号
,因此,Word和其他Office应用程序中原始键入的文本的编码问题很常见


要将cp1252转换为UTF-8,您必须使用
iconv('cp1252','UTF-8',$somestring)
而不是
utf8_encode
,后者与'real'ISO-8859-1'绑定。

您在编码字符串之前是否尝试过调用stripslashes()?我认为更公平的说法是,浏览器并不总是使用ISO-8859-1(又名拉丁语-1)。如果不是,他们就不一定使用Windows代码页,特别是在非Windows平台上。@StaxMan:在web的早期,你是对的,有多种不兼容的行为。但今天,当指定ISO-8859-1时,当前的浏览器都使用cp1252。HTML5这种和其他讨厌的编码替换。令人遗憾的是,这种丑陋的行为已经成为标准,而且没有办法指定“ISO-8859-1,我是认真的!”。。。但是我们都在使用UTF-8,所以谁在乎呢哦看来我今天学到了一些新东西。。。这非常有趣(是的,非常混乱!)。同意UTF-8(是的,我知道,并不是每个人都在使用它),我实际上喜欢JSON决定它是UTF-xx,而不是别的。