Как десериализовать строку XML вместе с удалением NCR?

У меня есть сериализованная строка XML, которую я хочу преобразовать в объект XML. Но его строка содержит несколько числовых ссылок, таких как ¥, я использовал simplexml_load_string для десериализации, но это не убирает этих персонажей.

И если я уйду, используя html_entity_decode, & в параметрах запроса URL-адресов, присутствующих в строке, также получает неоткрытый, который делает недействительным URL-адрес для синтаксического анализатора XML. Например,
https://testURL.com?param1=a&param2=b превращается в https://testURL.com?param1=a&param2=b и сейчас &param2 недопустимый символ для синтаксического анализатора XML

Одним наивным способом было бы заменить все &# с &# перед отправкой в ​​simplexml_load_string, но это может сломать несколько вещей. Пожалуйста, дайте мне знать лучший способ сделать то же самое.

0

Решение

Похоже, что у вас есть контент, который был дважды экранирован; вам нужно отменить порядок, в котором он был обработан, и отменить эти шаги, в обратном порядке вернуть оригинальный текст.

Например, если XML у вас выглядит так:

<thing url="https://testURL.com?param1=a&amp;param2=b" description="blah &amp;#xA5; blah" />

Тогда вполне вероятно, что исходные преобразования были:

  1. Escape описание вручную, смена ¥ в &#xA5;; оставить URL без изменений
  2. добавлять url а также description как атрибуты XML, экранирование & в &amp;

Итак, чтобы повернуть вспять, нужно:

  1. Обратный шаг 2: Извлечь url а также description атрибуты (используя SimpleXML)
  2. Обратный шаг 1: Unescape the description значение, но оставить url значение без изменений

Даю вам:

// Step 1; reverses the original step 2
$sx = simplexml_load_string($xml);
$url = (string)$xml['url'];
$description = (string)$xml['description'];

// Step 2; reverses the original step 1
$description = html_entity_decode( $description );
0

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

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

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