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

时间:2016-07-09 16:44:24

标签: php ms-access encoding utf-8

我的老板强迫我在php服务器中使用访问mdb数据库(是的,我很认真)。 我可以连接它并从中检索数据,但是你可以想象,我有编码问题,因为我想使用utf8工作。

问题是现在我有两个“解决方案”将Windows-1252翻译成UTF-8

这是第一种方式:

mb_convert_encoding($string, "UTF-8", "Windows-1252")

它有效,但问题是特殊字符未正确转换,例如charº转换为\u00ba而charÓ转换为\ u00d3。

我的第二种方式是这样做:

mb_convert_encoding(mb_convert_encoding($string, "UTF-8", "Windows-1252"), "HTML-ENTITIES", "UTF-8")

它也有效,但它发生相同,特殊字符未正确转换。 Charº转换为º

有人知道如何正确更改编码,包括特殊字符吗? 或者有人知道如何将º\u00ba转换为可读的内容吗?

2 个答案:

答案 0 :(得分:0)

我做了简单的测试,将codepoint转换为字母

<?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 ÓºÓ

获得此answer

的信用

答案 1 :(得分:0)

我终于找到了解决方案。 我从一开始就有解决方案,但我的测试错误。

我的坏。

为我做这件事的正确方法是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字符的原因。

感谢大家的帮助!!