为什么&被转换为& amp?

时间:2016-10-17 21:37:21

标签: php file csv

$file="csv.php?task=whovotedwho&election=7"; 
$filename = "whovotedwho-election7.csv"; 

if (file_exists("trash.png")) {
        header('Content-Description: File Transfer');
        header('Content-Type: text/csv');
        header('Content-Disposition: attachment; filename="'.($filename).'"');
        header('Expires: 0');
        header('Cache-Control: must-revalidate');
        header('Pragma: public');
        header('Content-Length: ' . filesize("trash.png"));
        readfile($file);
        exit;
    } else { echo "file does not exist"; }

我在下载的csv中得到了这个结果。

double amp in code

1 个答案:

答案 0 :(得分:4)

此:

$file="csv.php?task=whovotedwho&election=7"; 

它不是http://example.com/csv.php...之类的完整/绝对网址,因此当readfile()启动时,它会执行 LOCAL 文件请求,并寻找一个名称字面为csv.php?tasketc...的文件 NOT 执行http请求 - 它不能。您没有提供协议或主机,以便将该http请求发送给。

PHP与您的浏览器不同,<img src=kittens.jpg>内部翻译为<img src="http://example.com/kittens.jpg">

坦率地说,即使你在那里有一个完整的URL,这样做非常痛苦 - 你已经在准确的SAME服务器上执行代码,你正在做http请求所以所以它就像在你的车里跳来跳去城市500英里,这样你就可以把1英尺的地方停在你开始的地方的左边。

您在错误中所看到的是原始HTML。由于您的文件名中包含&,因此必须对其进行HTML编码,以使其在输出中显示为文字&,并且不会作为html实体进行渲染。