【问题标题】:Inserting line break or tab with preg_replace使用 preg_replace 插入换行符或制表符
【发布时间】: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); 可能是标签的更好位置。

标签: php html json regex


【解决方案1】:

您试图将 json 代码分成 3 行?任何我将如何使用数组解决这个问题的想法。尝试使用 json 进行转换。可能对你有帮助

<?php 
$fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');// i used associate array which is similar to json data
reset($fruit);
while (list($key, $val) = each($fruit)) {
$grav .= $key."=>". $val."<br>";// brakes the line into 3 
}
  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;
?>

【讨论】:


  • 在换行符上工作。 $grav = preg_replace("/\},\{/","
    ",$grav); $grav = preg_replace("/[\{/","
    ",$grav);这样它就分开了线条。我仍然无法正确插入制表符....当它找到分隔符',"'
  • @TiagoFerreira : 你能发布 $grav 包含的内容吗?
  • 我设法找到了一种在 html 上对制表符进行编码的方法:使用 我可以把数据分成几列谢谢你的帮助
猜你喜欢
  • 2012-07-09
  • 2019-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-26
  • 1970-01-01
相关资源
最近更新 更多