PHP将字符串转换为UTF-8,所有操作都失败

PHP将字符串转换为UTF-8,所有操作都失败,php,encoding,utf-8,Php,Encoding,Utf 8,我正在尝试将具有未知字符集的字符串转换为UTF-8。我尝试了各种解决方案,但我尝试的一切都失败了。我在这个问题的答案中输入了代码:。这就像我在当地的流浪者装置上的魅力。但在我的生产服务器上,这会失败 转换代码: iconv(mb_detect_encoding($text, mb_detect_order(), true), "UTF-8", $text); 要转换的字符串:De Krön 2 错误: iconv(): Detected an illegal character iconv('

我正在尝试将具有未知字符集的字符串转换为UTF-8。我尝试了各种解决方案,但我尝试的一切都失败了。我在这个问题的答案中输入了代码:。这就像我在当地的流浪者装置上的魅力。但在我的生产服务器上,这会失败

转换代码:

iconv(mb_detect_encoding($text, mb_detect_order(), true), "UTF-8", $text);
要转换的字符串:
De Krön 2

错误:

iconv(): Detected an illegal character
iconv('', 'UTF-8', 'De Kr\xC3\xB6n 2')
如您所见,
ö
是一种类似于
\xC3\Xb6
的编码。我已经读到,这可能是微软Word的复制粘贴问题。然而,我无法控制这一切。我得到一个CSV文件,需要将其导入数据库


正如我所说,它在本地为我的vagrant(Homestead)安装工作,但不在我的生产服务器上工作。什么会导致这个问题?

我想说问题是
mb\u detect\u order()
。事实上,你没有考虑它的价值与这个问题相关,这表明你还没有完全意识到<代码> BMyDebug的编码()/<代码> Works.BTW,我知道代码来自链接的问题,但我不确定ICONV和多字节扩展共享相同的确切编码名称。你应该试试mbÁconvert_encoding()。@lvaroGonzález,
mbÁconvert_encoding()
似乎可以完成这项工作,但只有当我强制
ASCII
作为
编码时。对于此特定字符串,
mb\u detect\u encoding()
返回false。因此它无法检测编码。我不确定将此设置为ASCII是否正确。事实上,我并不完全了解
mb\u detect\u encoding()
是如何工作的,我只知道它的作用。目前,我只使用这段代码
mb\u convert\u编码($text,'UTF-8','ASCII')
在生产服务器上似乎运行良好。wutz在接受答案下的评论很好地解释了这一点:«据我理解,mb\u detect\u编码贯穿了提供的编码列表,并接受字符串中没有无效字节序列的第一个。。。对于没有无效字节序列的编码,如ISO-8859-1,它总是正确的。没有“智能”启发法,结果会随着您传递的编码列表(和顺序)的不同而变化很大。»@lvaroGonzález,好的,所以
mb_detect_encoding()
返回false,因为所有提供的编码都失败。您应该回答必须使用
mb\u convert\u encoding()
代替
iconv()
,并解释原因。我认为问题在于
mb\u detect\u order()
。事实上,你没有考虑它的价值与这个问题相关,这表明你还没有完全意识到<代码> BMyDebug的编码()/<代码> Works.BTW,我知道代码来自链接的问题,但我不确定ICONV和多字节扩展共享相同的确切编码名称。你应该试试mbÁconvert_encoding()。@lvaroGonzález,
mbÁconvert_encoding()
似乎可以完成这项工作,但只有当我强制
ASCII
作为
编码时。对于此特定字符串,
mb\u detect\u encoding()
返回false。因此它无法检测编码。我不确定将此设置为ASCII是否正确。事实上,我并不完全了解
mb\u detect\u encoding()
是如何工作的,我只知道它的作用。目前,我只使用这段代码
mb\u convert\u编码($text,'UTF-8','ASCII')
在生产服务器上似乎运行良好。wutz在接受答案下的评论很好地解释了这一点:«据我理解,mb\u detect\u编码贯穿了提供的编码列表,并接受字符串中没有无效字节序列的第一个。。。对于没有无效字节序列的编码,如ISO-8859-1,它总是正确的。没有“智能”启发法,结果会随着您传递的编码列表(和顺序)的不同而变化很大。»@lvaroGonzález,好的,所以
mb_detect_encoding()
返回false,因为所有提供的编码都失败。您应该回答必须使用
mb\u convert\u encoding()
代替
iconv()
,并解释原因。