首页  >  问答  >  正文

PHP实现CSV文件中占位符替换为实际值

我有一个模板CSV文件,其中包含像{$NAME}这样的占位符 现在我想用实际值替换所有这些占位符。

我正在使用Laravel,但这并不重要。

目前的做法如下:

$templateCSV = Storage::get('quote.intake.form.template.csv'); // 读取文件内容
 
$vars = [ // 定义占位符和实际值
   '{$AGENT_NAME}'  => $agent['name'],
   '{$AGENT_PHONE}'  => $agent['phone'],
];

$newCSV = strtr($templateCSV, $vars); // 最后替换这些占位符。

Storage::put("my-new-csv.csv", $newCSV); // 保存新的CSV文件

这样做是有效的,但我认为这不是正确的方法,因为当一个值包含“,”时,它会破坏CSV结构。

我相信一定有更好的方法来做这个。

非常感谢您的帮助。

P粉520204081P粉520204081422 天前986

全部回复(1)我来回复

  • P粉652495194

    P粉6524951942023-09-17 09:57:48

    您可以用双引号包裹值,但这意味着您需要在值内部转义双引号:

    $sanitiseCsv = fn ($value) => '"'.str_replace('"', '""', $value).'"';
    
    $vars = [ // 使用实际值定义占位符
       '{$AGENT_NAME}'  => $sanitiseCsv($agent['name']),
       '{$AGENT_PHONE}'  => $sanitiseCsv($agent['phone']),
    ];

    注意:在双引号包裹的CSV值中,双倍双引号似乎是正确的转义双引号的方式。

    回复
    0
  • 取消回复