下载的json文件有额外的斜杠

时间:2015-11-02 13:06:22

标签: php json wordpress

我找到了一种方法来下载我的json文件,该文件包含wordpress中的一些json内容,在表单提交上,通过调用外部文件download.php然后执行header()。这是有效的,但是我通过下载获得的json文件已经转义了所有字符。甚至是双引号。并且json我在下载之前回应,不是。

已下载.json

{\"post\":[{\"ID\":3467,\"post_author\":

回应.json

{"post":[{"ID":3467,"post_author":"1"

我添加了菜单页面:

add_menu_page( 'Download JSON', 'Download JSON', 'manage_options', 'custompage', 'download_json', 'dashicons-download', 6000 );

在我的download_json()函数中,我有

$json_out = json_encode($output);

$download = htmlspecialchars($json_out);

echo '<form method="post" action="'.plugins_url().'/my_plugin/download.php">
        <input type="hidden" name="json" value="'.$download.'">
        <button type="submit" class="button-secondary">Download JSON</button>
    </form>';

$output是我的数组中的内容。隐藏输入字段中的json看起来像是回显的json。在我的download.php文件中

<?php
header("Content-type: application/force-download");
header('Content-Disposition: inline; filename="content.json"');
$json_contents = $_POST['json'];

echo $json_contents;

当我点击按钮时会下载content.json文件,但我有额外的转义字符,我不知道为什么。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

这是我在PHP4上用来删除斜杠的旧函数,但只有在自动添加它们时才会这样。

请注意,强烈建议不要使用magic_quotes。 (我认为它甚至不存在于PHP5中,不确定)

此函数可以采用普通值或数组,然后对所有元素执行此操作。我好几年都没用过它,所以一定要测试它是否符合你的要求。

function stripslashesIfAutoAdded($something){
    // This function removes added slashes
    // It only removes them if they were added.
    $mq_on = get_magic_quotes_gpc();
    if (is_array($something)){
        // loop over it and remove slashes where needed
        $retArr = array();
        foreach($something as $oneElement) {
            if ($mq_on){
                $retArr[] = stripslashes($oneElement);
            } else {
                $retArr[] = $oneElement;
            }
        }
        return $retArr;
    } else {
        if ($mq_on){
            return stripslashes($something);
        } else {
            return $something;
        }
    }
}