url中的simplexml_load_file&符号

时间:2013-05-28 15:16:37

标签: php

我们有一个简单的PHP脚本,可以从外部XML文件加载服务器状态,如下所示:

$xml = simplexml_load_file("http://domain.com/?module=server&action=status-xml");
foreach ($xml->Group->Server->attributes() as $nodename => $value){
    if ($nodename == $param){
        return $value;
    }
}

当脚本运行时,我们收到内部服务器错误500.查看错误日志,我们看到以下内容:http://i.stack.imgur.com/alOYI.png

基本上,网址中的& 正在进入& amp;

知道为什么会这样吗?这是在apache2 / w php-fpm设置。这是某种安全设置吗?

3 个答案:

答案 0 :(得分:2)

您看到的是PHP错误消息的 HTML 输出,其中&被转换为其各自的HTML实体&。这并不意味着&在查询字符串中发送到服务器。

答案 1 :(得分:0)

据我所知,这仅仅是一个错误报告功能,而不是在发出请求时URL的实际更改。您可以检查托管商是否已启用 html_errors 选项,或者您自己安装期间是否已启用 html_errors 选项。 (更多信息:www.php.net

启用 html_errors 后,所有错误内容都将转换为HTML实体,并添加指向在线PHP文档的链接。如果您随后检查服务器上的error.log,您将看到实体为文本而不是HTML。

答案 2 :(得分:0)

php doc中所述,您应该这样使用它。

simplexml_load_file(rawurlencode('http://example.com/?a='.urlencode('b').'&c='.urlencode('d')))

希望这有帮助。

[编辑] 但请确保服务器上所需的功能正常工作。通过直接从浏览器调用您的URL来检查这一点。这应该输出一个xml文件。