【发布时间】:2021-07-27 00:24:42
【问题描述】:
我正在尝试读取一个 .dat 文件(它是一个带有分隔符';' 的 CSV)并将其转换为一个表格并在 PHP 中完成,如下所示:
<table id='sol'>
<?php
echo "<html><body>";
$f = fopen("/var/www/html/uploads/data_old.dat", "r");
$var = 0;
/* Writes the CSV to table in the page*/
while (($line = fgetcsv($f, 0, ';')) !== false) {
echo "<tr>";
foreach ($line as $cell) {
if ($var < 36) {
echo "<th>" . htmlspecialchars($cell) . "</th>";
$var = $var + 1;
}
else {
echo "<td><div contenteditable>" . htmlspecialchars($cell) . "</div></td>";
}
}
echo "</tr>";
}
fclose($f);
echo "</body></html>";
?>
</table>
现在在编辑完表格中的值后,我需要将该表格保存在服务器上。 目前,我可以使用 JS 编写的脚本下载 .dat 中的表格,如下所示: p>
// Quick and simple export target #table_id into a csv
function download_table_as_csv(table_id, separator = ';') {
// Select rows from table_id
var rows = document.querySelectorAll('table#' + table_id + ' tr');
// Construct csv
var csv = [];
for (var i = 0; i < rows.length; i++) {
var row = [], cols = rows[i].querySelectorAll('td, th');
for (var j = 0; j < cols.length; j++) {
// Clean innertext to remove multiple spaces and jumpline (break csv)
var data = cols[j].innerText.replace(/(\r\n|\n|\r)/gm, '').replace(/(\s\s)/gm, ' ')
// Escape double-quote with double-double-quote
data = data.replace(/"/g, '""');
// Push escaped string
row.push('"' + data + '"');
}
csv.push(row.join(separator));
}
var csv_string = csv.join('\n');
// Download it
var filename = 'data_new' + '.dat';
var link = document.createElement('a');
link.style.display = 'none';
link.setAttribute('target', '_blank');
link.setAttribute('href', 'data:text/csv;charset=utf-8,' + encodeURIComponent(csv_string));
link.setAttribute('download', filename);
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
我对此很陌生,非常感谢任何帮助。
【问题讨论】:
-
不能保存到服务器,但是可以通过AJAX请求上传。
-
@MarkusZeller 感谢您的评论。目前,我正在使用上面的脚本下载,然后通过 HTML(带有调用 PHP 和方法 post 的操作的表单标签)和 PHP(move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $目标文件))。是否可以使用 AJAX 请求来避免这个额外的下载和上传步骤?
-
您是要让用户下载他们刚刚上传的 CSV 文件,还是要更改 CSV 中的值,然后让他们下载新副本?试图弄清楚你到底想要完成什么。
标签: javascript php html fgetcsv