我有一个序列化的XML字符串,我想将其转换为XML对象。但是他的字符串包含很少的数字字符引用,如¥
。我使用simplexml_load_string进行反序列化,但它不会忽略这些字符。
如果我使用html_entity_decode进行浏览,则字符串中存在的URL的查询参数中的&
也会被取消转义,从而使XML解析器的URL无效。例如,
https://testURL.com?param1=a&param2=b
转换为https://testURL.com?param1=a¶m2=b
,现在¶m2
是XML解析器的无效字符。
一种天真的方法是在发送到simplexml_load_string之前用&#
替换所有&#
,但这可能会破坏一些事情。请让我知道更好的方法。
答案 0 :(得分:0)
听起来你所拥有的内容已被双重逃脱;您需要取消处理它的顺序,并反转这些步骤,按相反顺序以取回原始文本。
例如,如果您拥有的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 );