2

在我的 PHP 代码中,我从外部 DLL 实例化 COM 对象。它工作正常,除了我从 com 对象方法之一接收 JSON 字符串时遇到问题。

如果字符串没有任何非拉丁字符 JSON 是正确的,但如果至少有一个非拉丁字符需要 UTF-8 编码,则从 COM 对象接收到的 JSON 在 PHP 中是不可解析的。json_last_error() 显示 UTF-8 编码有问题。

我很肯定 COM 对象返回正确编码的字符串,因为它在其他环境中使用并且工作正常。

当我检查收到的字符串内容时,很明显非拉丁字符以奇怪和无效的方式“编码”。当我在 COM 对象中检查相同的字符串时,就在它被发送到 PHP 之前,它被正确编码。

似乎 PHP 到 COM 对象的通信是使用非 UTF-8 编码完成的,这会弄乱字符串。

我发现与将 UTF-8 与 COM 对象一起使用的唯一事情是在 php.ini 的 [COM] 部分中设置 com.code_page=UTF-8。但是,无论如何设置,我都有同样的不良行为。

我还应该怎么做才能从 COM 对象中获取正确编码的 UTF-8 字符串?

4

1 回答 1

2

好吧,答案就在我眼前,我只是忽略了:

COM::__construct ( 字符串 $module_name [, 混合 $server_name [, int $codepage [, string $typelib ]]] )

有代码页参数。如果设置为 CP_UTF8 它可以工作。

如果不使用服务器,$server_name 应该为 NULL。

于 2017-11-06T15:30:36.943 回答