OllyBarca
OllyBarca

Reputation: 1531

decoding XML in order to process with simplexml_load_string()

I have the following XML string:

$xml = '<?xml version="1.0" encoding="ISO-8859-1"?>
\n<RESPONSE>\n
<STATUS>OK</STATUS>\n
<ClientID>0</ClientID>\n
<URLREDIRECT>https://www.mywebsite.co.uk/redirect/?tid=1020ca5888bc56018096d1f6eba98d&data=WwB7ACIAQwBsAGkAZQBuAHQASQBEACIAOgAiAHIAYQB0AGQAZQBjADAAMAAxADAAMAAyADAAMgAwADkAOQA5ADMAOQAzADgAOAA4ADIAOAAyADcAMwA3ADMAOAA0ADgANAA3ADgAMQAxADEAOAAyADgAIgAsACIAUwB1AGIASQBEACIAOgAiACIALAAiAEYAaQByAHMAdABOAGEAbQBlACIAOgAiAFMAaQBkAG4AZQB5AGUAcgBwACIALAAiAFMAdQByAE4AYQBtAGUAIgA6ACIAUwBtAGkAdABoAGUAcgB0AHQAdABwACIALAAiAE0AbwBiAGkAbABlACIAOgAiADAANwAwADAAMAAwADAANgA3ADYAOQAiACwAIgBFAG0AYQBpAGwAIgA6ACIAcwBpAGQAbgBlAHkALgBzAG0AaQB0AGgANgA3ADYAOQBAAHIAZwByAG8AdQBwAC4AYwBvAC4AdQBrACIALAAiAFAAbwBzAHQAQwBvAGQAZQAiADoAIgBTAEUANgAgADgAUgBUACIALAAiAEgAbwB1AHMAZQBOAHUAbQBiAGUAcgAiADoAIgBSAGkAYwBoAG0AbwBuAGQAIABIAG8AdQBzAGUAIgAsACIATgB1AG0ARABlAGIAdABzACIAOgAiADIAIgAsACIARABlAGIAdABsAGUAdgBlAGwAIgA6ACIAMgAwADAAMAAiACwAIgBBAGYAZgBvAHIAZABhAGIAaQBsAGkAdAB5ACIAOgAiADgAMAAiAH0AXQA=
</URLREDIRECT>\n
</RESPONSE>';

I am trying to decode the string as follows:

$decodedXML = html_entity_decode($xml, ENT_XML1);

and then interpret as an object:

$xml = simplexml_load_string($decodedXML);

However, upon running the simplexml_load_string() function, I am receiving the following error:

html_entity_decode() expects parameter 2 to be long, string given in
...

I am not sure if this is due to the way I am decoding the XML string? Any suggestions?

Upvotes: 0

Views: 102

Answers (2)

ThW
ThW

Reputation: 19512

The error message is triggered by the ENT_XML1 constant. If it is unknown by your PHP version, PHP will use the constant name as a string. The function does not support a string as the second argument.

To avoid errors like this, always develop with error level E_ALL, showing notices. PHP will throw an notice that the constant is unknown and used as a string.

But decoding the XML entities of an XML string can break it. Be careful.

Upvotes: 1

shadowfox
shadowfox

Reputation: 505

Get rid of the \n characters and use CDATA to keep the URL from being parsed:

<?xml version="1.0" encoding="ISO-8859-1"?>
<RESPONSE>
<STATUS>OK</STATUS>
<ClientID>0</ClientID>
<URLREDIRECT><![CDATA[https://www.mywebsite.co.uk/redirect/?tid=1020ca5888bc56018096d1f6eba98d&data=WwB7ACIAQwBsAGkAZQBuAHQASQBEACIAOgAiAHIAYQB0AGQAZQBjADAAMAAxADAAMAAyADAAMgAwADkAOQA5ADMAOQAzADgAOAA4ADIAOAAyADcAMwA3ADMAOAA0ADgANAA3ADgAMQAxADEAOAAyADgAIgAsACIAUwB1AGIASQBEACIAOgAiACIALAAiAEYAaQByAHMAdABOAGEAbQBlACIAOgAiAFMAaQBkAG4AZQB5AGUAcgBwACIALAAiAFMAdQByAE4AYQBtAGUAIgA6ACIAUwBtAGkAdABoAGUAcgB0AHQAdABwACIALAAiAE0AbwBiAGkAbABlACIAOgAiADAANwAwADAAMAAwADAANgA3ADYAOQAiACwAIgBFAG0AYQBpAGwAIgA6ACIAcwBpAGQAbgBlAHkALgBzAG0AaQB0AGgANgA3ADYAOQBAAHIAZwByAG8AdQBwAC4AYwBvAC4AdQBrACIALAAiAFAAbwBzAHQAQwBvAGQAZQAiADoAIgBTAEUANgAgADgAUgBUACIALAAiAEgAbwB1AHMAZQBOAHUAbQBiAGUAcgAiADoAIgBSAGkAYwBoAG0AbwBuAGQAIABIAG8AdQBzAGUAIgAsACIATgB1AG0ARABlAGIAdABzACIAOgAiADIAIgAsACIARABlAGIAdABsAGUAdgBlAGwAIgA6ACIAMgAwADAAMAAiACwAIgBBAGYAZgBvAHIAZABhAGIAaQBsAGkAdAB5ACIAOgAiADgAMAAiAH0AXQA=]]></URLREDIRECT>
</RESPONSE>

Upvotes: 0

Related Questions