simplexml_load_string - ошибка разбора из-за символов юникода в полезной нагрузке - PullRequest
0 голосов
/ 01 сентября 2018

У меня проблема с simplexml_load_string ошибкой из-за ошибок синтаксического анализа из-за полезной нагрузки xml, поступающей из базы данных с символами Unicode в ней.

Я в растерянности, как заставить php прочитать это и использовать xml, как обычно. Код работал нормально, пока люди не стали креативными с отправляемыми данными.

К сожалению, я не могу изменить исходные данные, мне нужно работать с тем, что я получаю, чтобы дать вам представление, одно поле, которое нарушает его в исходном необработанном чеке, выглядит так:

<FirstName>?</FirstName>

Ранее код работал нормально, анализируя xml простой строкой:

$xmlresult = simplexml_load_string($result, 'SimpleXMLElement',LIBXML_NOCDATA);

Однако с этими символами Юникода это просто ошибки. В зависимости от того, что я использую для просмотра данных, если я дам дамп сырой полезной нагрузки, это может выглядеть так:

 <d83d><dc3a>

или <U+D83D><U+DC3A>

Чтение немного в стеке, казалось, DOM мог бы работать, но там тоже не повезло.

Входящий полезный груз имеет заголовок:

?xml version="1.0" encoding="UTF-8"?>

данные поступают через

<data type="cdata"><![CDATA[<payload>

Я в полной растерянности, надеюсь, я могу получить некоторую помощь, чтобы помочь мне преодолеть этот горб с этой обработкой данных.

1 Ответ

0 голосов
/ 02 сентября 2018

Я смотрел на это уже несколько дней, и, похоже, я не пытался обернуть свою функцию вызова curl utf8_encode следующим образом:

    $result = utf8_encode(do_curl($xmlbuildquery));

Моя функция do_curl - это просто отдельная функция для вызова процедуры curl, не более того. Делая это, я могу анализировать результаты, вместо того, чтобы отображались символы Юникода, вместо этого он отображается как

[firstname] => í ½í°º

(выше - результат print_r ($ result); после
$ xmldata = simplexml_load_string ((строка) $ xmlresult-> body-> function-> data);

После этого xml наконец-то разбирается. Как ни странно, это вызвало у меня еще большее любопытство, поскольку эта информация предоставляется через csv, который импортируется в базу данных mysql, и когда я просматриваю ту же запись, она выглядит так:

 FirstName: ????

с установленным типом таблицы: FirstName varchar (40) COLLATE utf8mb4_unicode_ci NOT NULL,

Это может означать, что они не utf8_encoding для вывода в CSV, возможно, отдельно от этой проблемы, но просто интересно.

И, наконец, мой сценарий может снова запуститься !!

...