带有htmlspecialchars的php simplexml_load_file

时间:2013-03-20 04:52:36

标签: php xml xml-parsing simplexml htmlspecialchars

我使用以下代码获取XML的内容:

$xml = simplexml_load_file("X.xml");
echo $xml->CountryList->Country[1];

这是X.xml:

<PickUpCityListRQ>
  <CountryList>
    <Country>Albania</Country>
    <Country>Andorra</Country>
  </CountryList>
</PickUpCityListRQ>

一切正常,它为我返回安道尔,但是,当我尝试使用特殊字符的网址时,就像这个:

http://somelink/ServiceRequest.do?xml=<PickUpCityListRQ><Credentials username='USERNAME' password='PASSWORD' remoteIp='IP'/><Country>UK</Country></PickUpCityListRQ>

此链接不适合您,因为它只是一个示例,但相信,真实链接返回与X.xml相同的内容。我知道其中的原因是链接中的特殊字符,但我无法使其工作。我试过这样的事情:

$username = "USERNAME";
$password = "PASSWORD";
$accessurl = htmlspecialchars("Credentials username='$username' password='$password' remoteIp='123.123.123.123'/");
$required = htmlspecialchars("<PickUpCityListRQ><$accessurl><Country>UK</Country></PickUpCityListRQ>");
$url = 'somelink/service/ServiceRequest.do?xml='.$required;
echo $url;

它返回(带有echo)所需的链接,如果我手动使用它(在浏览器中)我将获得所需的内容。但是,如果我尝试使用此代码获取XML内容:

$xml = simplexml_load_file($url);
echo $xml->CountryList->Country[1];

我不会工作。 有任何想法吗? 提前谢谢。

2 个答案:

答案 0 :(得分:2)

htmlspecialchars用于保护HTML内容页面中的特殊字符(特别是在用户输入上,以避免某种XSS或其他攻击......)。

当您操纵网址时,您应该使用urlencode来发送您的内容作为网址的参数。

所以你的网址是:

http://someserver/somethink/services/ServiceRequest.do?xml=%3CPickUpCityListRQ%3E%3CCredentials%20username%3D'USERNAME'%20password%3D'PASS‌​WORD'%20remoteIp%3D'IP'%2F%3E%3CCountry%3EUK%3C%2FCountry%3E%3C%2FPickUpCityListR‌​Q%3E

正如文档所说,urldecode并不是必需的,因为超级全局$ _GET和$ _REQUEST已经被urldecoded。因此,在执行此任务的脚本中,您可以直接使用$ _GET条目中的值。

$xml = simplexml_load_string($_GET['xml']);

文档:urlencode

答案 1 :(得分:0)

PHP simplexml_load_file with special chars in URL

中被盗的答案

使用此

$username = "USERNAME";
$password = "PASSWORD";
$accessurl = "Credentials username='$username' password='$password' remoteIp='123.123.123.123'/";
$required = "<PickUpCityListRQ><$accessurl><Country>UK</Country></PickUpCityListRQ>";

$url= rawurlencode("somelink/service/ServiceRequest.do?xml={$required}");

$xml = simplexml_load_file($url);
echo $xml->CountryList->Country[1];