Alexufo
@Alexufo
противоречивый, сложный, весь компьютерный.

PHP и COM объект возвращает битый параметр массива только в 1 месте

Создаем com объект в php. Все работает гладко.

$obj = new COM("blablabla.blala");

if ($obj ->Init()) {
    $result = $obj ->Recognize('C:/1.jpg'");
}


$result если разложить мы увидим это:

aaa[]:
  0: [фамилия, Иванов]
    0: "фамилия"
    1: "Иванов"
  1: [отчество, Борисович]
    0: "отчество"
    1: "Борисович"
  2: "64"                        <--  Блин, что тут это за ерунда??? 64 в COM php?
  3: [гражданство, рф]
    0: "гражданство"
    1: "рф"


Мы видим, что у второго индекса просто «64».

Делаем аналогично, подключаем этот же самый COM объект но не через php, а через Powershell. Результат получаем такой:

aaa[]:
  0: [фамилия, Иванов]
    0: "фамилия"
    1: "Иванов"
  1: [отчество, Борисович]
    0: "отчество"
    1: "Борисович"
  2: [Имя, Александр]                    <--  Все тут отлично!!
    0: "Имя"
    1: "Александр"      
  3: [гражданство, рф]
    0: "гражданство"
    1: "рф"


ТО есть все отлично через powershell. Как так происходит? Кодировка массива UTF16LE — не ужели массив бьется в php_com_dotnet.dll? Никакие игры с кодировками не помогают, бьется часть массива, что с этим делать вообще не представляю.
  • Вопрос задан
  • 3083 просмотра
Решения вопроса 1
Alexufo
@Alexufo Автор вопроса
противоречивый, сложный, весь компьютерный.
Что конкретно не разобрался до конца.
Дебажить массивы из COM объекта не очень удобно. Разобрал массив через другой класс, предложенным через другой способ документашкой Dll.

Есть подозрение, что при сборе массива в неправильной кодировке перед названием поля попался какой-то символ. Это подтвердилось выводом xml через другую функцию. Браузерный валидатор такую xml сразу отбраковал из за непонятного символа как раз перед именем поля.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы