通过PHP格式下载文件

时间:2014-10-28 15:00:23

标签: php jquery json

我试图通过PHP形式下载json数据。 文件正在下载,但dsnt获取我定义的名称,在文件中只打印了我的json数据中的两个字符。

里面的文件看起来像:

  

[{

当json数据显示时:

  

[{" SIZE":[16,16]}]

他是代码:

var dataAsText = JSON.stringify(data); 
var filename=$("#menu-save-text").val();
var _content = dataAsText;
jQuery('<form action="download.php" method="POST"><input type="hidden" name="filename" value="'+filename +'" /><input type="hidden" name="content" value="'+_content+'" /></form>').appendTo('body').submit().remove();

PHP:

<?
            $filename=$POST["filename"];
            header("Content-type: text/plain"); 
            header("Content-Disposition: attachment; filename=".$filename.""); 
            header("Pragma: public");
            header("Expires: 0");
            header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
            header("Cache-Control: private",false);

            echo $_POST["content"];        
    ?>

下载的文件名是download.php

1 个答案:

答案 0 :(得分:1)

您正遭受HTML注入漏洞的困扰。 JSON中的"会破坏您的HTML:

e.g。你构建的HTML看起来像这样:

[..snip..]<input type="hidden" name="content" value="[{"SIZE":[16,16]}]" />[..snip..]

浏览器会将其解析为:

input:
  value="[}"         // proper attribute
  size":[16,etc...  // unknown/illegal html attribute

换句话说,您需要引用您的JSON以在html表单属性中使用,例如:将所有"更改为&quot;。那个或使用正确的dom方法构建HTML,并通过$(...).val(json_goes_here)设置内容输入的值 - 用jquery键入操作。