如何在 PHP 中使用 COM 对象获取 UTF-8 字符串?
How to get UTF-8 string using COM object in PHP?
在我的 PHP 代码中,我从外部 DLL 实例化 COM 对象。它工作正常,除了我在从 com 对象方法之一接收 JSON 字符串时遇到问题。
如果字符串中没有任何非拉丁字符JSON我得到的是正确的,但是如果至少有一个非拉丁字符需要UTF-8编码,那么JSON从 COM 对象接收时在 PHP 中不可解析。 json_last_error() 显示 UTF-8 编码有问题。
我确信 COM 对象 returns 正确编码了字符串,因为它在其他环境中使用并且工作正常。
当我检查接收到的字符串内容时,很明显非拉丁字符以奇怪和无效的方式 "encoded"。当我在 COM 对象中检查相同的字符串时,就在它被发送到 PHP 之前,它被正确编码了。
似乎 PHP 到 COM 对象的通信是使用非 UTF-8 编码完成的,这弄乱了字符串。
我发现唯一与使用 UTF-8 和 COM 对象相关的是在 php.ini 的 [COM] 部分设置 com.code_page=UTF-8。但是,无论如何设置,我都有同样的不良行为。
我还应该如何从 COM 对象中获取正确编码的 UTF-8 字符串?
嗯,答案就在我眼前,我只是忽略了:
COM::__construct ( string $module_name [ mixed $server_name [ int $codepage [ string $typelib ]]] )
有代码页参数。如果设置为 CP_UTF8 它有效。
如果未使用服务器,$server_name 应为 NULL。
在我的 PHP 代码中,我从外部 DLL 实例化 COM 对象。它工作正常,除了我在从 com 对象方法之一接收 JSON 字符串时遇到问题。
如果字符串中没有任何非拉丁字符JSON我得到的是正确的,但是如果至少有一个非拉丁字符需要UTF-8编码,那么JSON从 COM 对象接收时在 PHP 中不可解析。 json_last_error() 显示 UTF-8 编码有问题。
我确信 COM 对象 returns 正确编码了字符串,因为它在其他环境中使用并且工作正常。
当我检查接收到的字符串内容时,很明显非拉丁字符以奇怪和无效的方式 "encoded"。当我在 COM 对象中检查相同的字符串时,就在它被发送到 PHP 之前,它被正确编码了。
似乎 PHP 到 COM 对象的通信是使用非 UTF-8 编码完成的,这弄乱了字符串。
我发现唯一与使用 UTF-8 和 COM 对象相关的是在 php.ini 的 [COM] 部分设置 com.code_page=UTF-8。但是,无论如何设置,我都有同样的不良行为。
我还应该如何从 COM 对象中获取正确编码的 UTF-8 字符串?
嗯,答案就在我眼前,我只是忽略了:
COM::__construct ( string $module_name [ mixed $server_name [ int $codepage [ string $typelib ]]] )
有代码页参数。如果设置为 CP_UTF8 它有效。
如果未使用服务器,$server_name 应为 NULL。