Php mb_转换_编码问题
我对PHP函数mb_detect_编码有一些问题。 我无法将其转换为ISO-8859-1。有什么帮助吗 代码: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; 输出:
$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 plusbin2hex
进行调试,我可以看到字节序列已更改,但mb_detect_encoding
将始终返回“UTF-8”。PHP 5.3.10.@Passenger-将mb_internal_编码设置为UTF-8的净效果在本例中相当于将UTF-8设置为mb_convert_编码的第三个参数。我认为,鉴于OP没有谈到使用其他mb_u函数,他所看到的情况不太可能意味着你所描述的情况已经发生。也就是说,我认为这更可能解决错误转换(尽管不是我所建议的),而不是问题的原因。ISO-8859-1是否适用于不编码“字符串”(即随机无效字节序列)的情况?