У меня есть сериализованная строка XML, которую я хочу преобразовать в объект XML. Но его строка содержит несколько числовых ссылок, таких как ¥
, я использовал simplexml_load_string для десериализации, но это не убирает этих персонажей.
И если я уйду, используя html_entity_decode, &
в параметрах запроса URL-адресов, присутствующих в строке, также получает неоткрытый, который делает недействительным URL-адрес для синтаксического анализатора XML. Например,
https://testURL.com?param1=a&param2=b
превращается в https://testURL.com?param1=a¶m2=b
и сейчас ¶m2
недопустимый символ для синтаксического анализатора XML
Одним наивным способом было бы заменить все &#
с &#
перед отправкой в simplexml_load_string, но это может сломать несколько вещей. Пожалуйста, дайте мне знать лучший способ сделать то же самое.
Похоже, что у вас есть контент, который был дважды экранирован; вам нужно отменить порядок, в котором он был обработан, и отменить эти шаги, в обратном порядке вернуть оригинальный текст.
Например, если XML у вас выглядит так:
<thing url="https://testURL.com?param1=a&param2=b" description="blah &#xA5; blah" />
Тогда вполне вероятно, что исходные преобразования были:
¥
в ¥
; оставить URL без измененийurl
а также description
как атрибуты XML, экранирование &
в &
Итак, чтобы повернуть вспять, нужно:
url
а также description
атрибуты (используя SimpleXML)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 );
Других решений пока нет …