Как получить строку UTF-8, используя COM-объект в PHP?

В моем PHP-коде я создаю экземпляр COM-объекта из внешней DLL. Он работает нормально, но у меня проблема с получением строки JSON от одного из методов объекта com.

Если строка не содержит нелатинских символов, то JSON, который я получаю, является правильным, но если есть хотя бы один нелатинский символ, требующий кодировки UTF-8, этот JSON при получении из COM-объекта не может быть проанализирован в PHP. json_last_error () показывает проблему с кодировкой UTF-8.

Я уверен, что COM-объект возвращает правильно закодированные строки, так как он используется в других средах и работает нормально.

Когда я проверяю содержимое полученной строки, очевидно, что нелатинские символы «кодируются» странным и недопустимым образом. Когда я проверяю ту же строку в COM-объекте, перед отправкой в ​​PHP она корректно кодируется.

Похоже, что связь между объектами PHP и COM осуществляется с использованием кодировки, отличной от UTF-8, и это портит строку.

Единственное, что связано с использованием UTF-8 с COM-объектами, которые я обнаружил, это установка com.code_page = UTF-8 в секции [COM] php.ini. Однако независимо от того, как это установлено, у меня одинаково плохое поведение.

Что еще я должен сделать, чтобы получить правильную кодированную строку UTF-8 из COM-объекта?

0

Решение

Ну, ответ был прямо перед моими глазами, я просто упустил из виду:

Конструкция COM :: __ (строка $ module_name [, mixed $ server_name [, int $ codepage [, string $ typelib]]])

Есть параметр кодовой страницы. Если установлено в CP_UTF8, это работает.

$ server_name должно быть NULL, если сервер не используется.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]