【发布时间】:2021-01-11 13:11:05
【问题描述】:
我正在制作一个网页,其中我必须在 3 种给定情况下插入一个 JSON 变量(包含来自 JSON 的所有原始数据的 $grav)一个换行符或一个制表符。之后,我强制将数据下载为 xls 文件。除了“preg_replace”部分外,一切正常。根据下载的 xls 文件,它找到了分隔符,但不是插入“\n”或“\t”,而是只插入一个空格(数据全部在一个单元格中,而不是在多个列和行中(即为什么我需要换行符和制表符)。
$grav='"title":[{"field1":,"field3":,{"field4"}';
$grav = preg_replace("/\},\{/", "},\n{", $grav);
$grav = preg_replace("/\[\{/", "\n[{", $grav);
$grav = preg_replace("/,\"/", ",\"\t", $grav);
header("Content-Description: File Transfer");
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="data_ '. date("Ymd") . '_' . $id . '.xls"');
header("Content-Transfer-Encoding: binary");
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header("Content-Type: application/force-download");
header("Content-Type: application/download");
echo $grav;
我该如何解决这个问题?
【问题讨论】:
-
你可以去循环和 br 行。你为什么要这样做?
-
@VigneswaranS 只是为了提高效率。我有循环替换每个出现的地方,而且花了很长时间才完成。
-
@stribizhev 我认为 preg_replace 正确调用...第一个参数是“/\},\{/”第二个参数是“”},\n{”,最后一个是 $grav , 这是字符串。它确实找到了分隔符(第一个参数)的出现,但它插入了一个空格而不是换行符
-
有时标签不对齐。至于换行符,您应该插入一个
\r\n,除非您知道 php 会将换行符转换为 CRLF。大多数 Windows 文件都需要 CRLF 换行符。 -
这个
preg_replace("/,\"/", ",\t\"", $grav);可能是标签的更好位置。