使用 PHP 访问 mdb 数据库的特殊字符编码问题


Problems with special chars encoding with an access mdb database using php

我的老板强迫我在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 字符的原因。

谢谢大家的帮助!!