Fra*_*ula 20
fputcsv()并不总是必要的,特别是如果您不需要编写任何文件但想要将CSV作为HTTP响应返回.您需要做的就是对每个值进行双重引用,并在每次找到一个双引号字符时重复双引号.
这里举几个例子:
hello -> "hello"
this is my "quote" -> "this is my ""quote"""
catch 'em all -> "catch 'em all"
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,单引号字符不需要任何转义.
遵循一个完整的工作示例:
<?php
$arrayToCsvLine = function(array $values) {
$line = '';
$values = array_map(function ($v) {
return '"' . str_replace('"', '""', $v) . '"';
}, $values);
$line .= implode(',', $values);
return $line;
};
$csv = [];
$csv[] = $arrayToCsvLine(["hello", 'this is my "quote"', "catch 'em all"]);
$csv[] = $arrayToCsvLine(["hello", 'this is my "quote"', "catch 'em all"]);
$csv[] = $arrayToCsvLine(["hello", 'this is my "quote"', "catch 'em all"]);
$csv = implode("\r\n", $csv);
Run Code Online (Sandbox Code Playgroud)
如果您收到错误只是因为您使用的是旧版本的PHP.通过使用旧语法声明数组并将lambda函数替换为经典函数来修复它.
Ara*_*ran 15
对于那些尝试使用PHP清理数据并输出为CSV的人来说,这可以使用PHP的fputcsv()函数来完成,而不必像这样写入文件:
<?php
// An example PHP array holding data to be put into CSV format
$data = [];
$data[] = ['row1_val1', 'row1_val2', 'row1_val3'];
$data[] = ['row2_val1', 'row2_val2', 'row2_val3'];
// Write to memory (unless buffer exceeds 2mb when it will write to /tmp)
$fp = fopen('php://temp', 'w+');
foreach ($data as $fields) {
// Add row to CSV buffer
fputcsv($fp, $fields);
}
rewind($fp); // Set the pointer back to the start
$csv_contents = stream_get_contents($fp); // Fetch the contents of our CSV
fclose($fp); // Close our pointer and free up memory and /tmp space
// Handle/Output your final sanitised CSV contents
echo $csv_contents;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48656 次 |
| 最近记录: |