我有一個模板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粉6524951942023-09-17 09:57:48
您可以用雙引號包裹值,但這表示您需要在值內部轉義雙引號:
$sanitiseCsv = fn ($value) => '"'.str_replace('"', '""', $value).'"'; $vars = [ // 使用实际值定义占位符 '{$AGENT_NAME}' => $sanitiseCsv($agent['name']), '{$AGENT_PHONE}' => $sanitiseCsv($agent['phone']), ];
注意:在雙引號包裹的CSV值中,雙倍雙引號似乎是正確的轉義雙引號的方式。