Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.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 mb_转换_编码问题_Php_Encoding_Utf 8 - Fatal编程技术网

Php mb_转换_编码问题

Php mb_转换_编码问题,php,encoding,utf-8,Php,Encoding,Utf 8,我对PHP函数mb_detect_编码有一些问题。 我无法将其转换为ISO-8859-1。有什么帮助吗 代码: $str = "åäö"; $encoding = mb_detect_encoding($str); echo $encoding; $encoding = mb_detect_encoding(mb_convert_encoding($str, "ISO-8859-1")); echo $encoding; 输出:

我对PHP函数mb_detect_编码有一些问题。 我无法将其转换为ISO-8859-1。有什么帮助吗

代码:

$str = "åäö";
$encoding = mb_detect_encoding($str);
echo $encoding;
            
$encoding = mb_detect_encoding(mb_convert_encoding($str, "ISO-8859-1"));
echo $encoding;
输出:

$str = "åäö";
$encoding = mb_detect_encoding($str);
echo $encoding;
            
$encoding = mb_detect_encoding(mb_convert_encoding($str, "ISO-8859-1"));
echo $encoding;
UTF-8

UTF-8

更新,解决方案:

$str = "åäö";
$encoding = mb_detect_encoding($str);
echo $encoding;
            
$encoding = mb_detect_encoding(mb_convert_encoding($str, "ISO-8859-1"));
echo $encoding;

我将mb_detect_顺序更新为数组('UTF-8','ISO-8859-1'),它工作了。

我将mb_detect_顺序更新为数组('UTF-8','ISO-8859-1'),它工作了。

您实际上还没有转换字符串。相反,调用
mb\u convert\u encoding
并没有假定原始字符串是UTF-8格式的。调用之前的字符串是一个字节序列,可能已经是ISO-8859-1(并且可能以不同的方式表示项)。您可以通过在字符串上使用
bin2hex
并在转换调用后查看字节序列,而不是调用
mb\u detect\u encoding
,看到这种情况。您将看到字节序列没有改变

要使转换工作,您需要告诉它(在本例中)原始编码。使用:

mb_convert_encoding($str, 'ISO-8859-1','utf-8');

如果在此之后检查字节序列,您将看到已发生转换。

您的
mb\u detect\u order()
?好了。一开始我将mb_-detect_命令更新为UTF-8,它成功了。谢谢如果你已经解决了你的问题,请把它作为一个答案贴出来,并在你能接受的时候接受它。你是在欺骗自己相信转换已经成功了。由于c3a5c3a4c3b6在UTF-8和ISO-8859-1中都是有效的字节字符串(在这两种情况下表示不同的内容),您可以获得mb_detect_order将其报告为任意一种编码。@borrible如果他的
mb_internal_encoding
已设置为UTF-8会怎么样?@路人-这与我们看到的情况不一致。如果字符串实际上已转换为ISO-8859-1,则它将成为字节序列E5F6。这是无效的UTF-8,因此mb_convert_编码不会报告UTF-8。但是,如果序列被保留为c3a5c3a4c3b6(有效的UTF-8或ISO-8859-1),我们将得到描述的情况。@borrible即使字符串不是有效的UTF-8,
mb\u detect\u encoding
也可能始终返回“UTF-8”。我的默认
mb\u-detect\u顺序是
ASCII,UTF-8
。通过只指定
mb_internal_encoding(“UTF-8”)
,并运行OP的code plus
bin2hex
进行调试,我可以看到字节序列已更改,但
mb_detect_encoding
将始终返回“UTF-8”。PHP 5.3.10.@Passenger-将mb_internal_编码设置为UTF-8的净效果在本例中相当于将UTF-8设置为mb_convert_编码的第三个参数。我认为,鉴于OP没有谈到使用其他mb_u函数,他所看到的情况不太可能意味着你所描述的情况已经发生。也就是说,我认为这更可能解决错误转换(尽管不是我所建议的),而不是问题的原因。ISO-8859-1是否适用于不编码“字符串”(即随机无效字节序列)的情况?