我的老板强迫我在php服务器中使用访问mdb数据库(是的,我是认真的)。我可以连接它并从中检索数据,但正如您可以想象的那样,我在编码方面遇到了问题,因为我想使用 utf8 工作。
问题是现在我有两个"解决方案"将 Windows-1252 转换为 UTF-8
这是第一种方法:
mb_convert_encoding($string, "UTF-8", "Windows-1252")
.
它可以工作,但问题是特殊字符未正确转换,例如 char º 转换为 'u00ba
个字符,字符 Ó 转换为 ''u00d3。
我的第二种方法是这样做:
mb_convert_encoding(mb_convert_encoding($string, "UTF-8", "Windows-1252"), "HTML-ENTITIES", "UTF-8")
它也可以工作,但发生相同,特殊字符未正确转换。字符º转换为º
有没有人知道如何正确更改编码,包括特殊字符?或者有人知道如何从º
和'u00ba
转换为可读的东西吗?
我做了简单的测试来将代码点转换为字母
<?php
function codepoint_decode($str) {
return json_decode(sprintf('"%s"', $str));
}
$string_with_codepoint = "Ahed 'u00d3'u00ba'u00d3";
// $string_with_codepoint = mb_convert_encoding($string, "UTF-8", "Windows-1252");
$output = codepoint_decode($string_with_codepoint);
echo $output; // Ahed ÓºÓ
这个答案的功劳去
我终于找到了解决方案。我从一开始就有解决方案,但我的测试做错了。
我的坏。
对我来说,正确的方法是mb_convert_encoding($string, "UTF-8", "Windows-1252")
但是我像这样检查结果:
$stringUTF8 = mb_convert_encoding($string, "UTF-8", "Windows-1252");
echo json_encode($stringUTF8);
这就是为什么它像 'u20ac
一样返回 Unicode 字符,如果我愿意的话:
$stringUTF8 = mb_convert_encoding($string, "UTF-8", "Windows-1252");
echo $stringUTF8;
我应该从一开始就看到解决方案,但我错了。正是json_encode()
将特殊字符转换为 unicode 字符的原因。
谢谢大家的帮助!!