使用 fputcsv 时无法删除双引号
Unable to remove double quotes when using fputcsv
我创建了一个脚本,可以将一堆 MySQL 表导出到 csv。脚本工作正常,除了我需要在将每一行放入 CSv 文件之前删除双引号。
我正在使用 str_replace,它在我需要替换任何 | 实例时有效。但是由于某种原因它不适用于双引号。我想我一定遗漏了一些明显的东西。
require_once 'mysqliconn.php';
$mysql_tables = array("OutputApplicationsView", "OutputComponentsView", "OutputDevicesView", "OutputDisksView", "OutputInstalledSoftwareView", "OutputModulesView", "OutputOraclePTVView", "ScopeListView");
foreach ($mysql_tables as $mysql_table) {
echo "<br> Exporting $mysql_table to CSV file. Please wait.</br>";
$sql = "SELECT * FROM ". $mysql_table . " LIMIT 10";
$stmt = $myconn->prepare($sql);
if($stmt === false) {trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $myconn->error, E_USER_ERROR);}
$execute = $stmt->execute();
if($execute === false) {trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $myconn->error, E_USER_ERROR); exit;}
$results = $stmt->get_result();
$array = $results->fetch_all(MYSQLI_ASSOC);
$file = $mysql_table . ".txt";
$fp = fopen($file, 'w');
foreach ($array as $row) {
$row = str_replace("|", ":", $row); //works fine
$row = str_replace('"', '', $row); //this part won't work.
$row = preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x9F]/u', '', $row);
$row = preg_replace('/[\x00-\x1F\x7F-\xA0\xAD]/u', '', $row);
fputcsv($fp, $row, "|");
}
fclose($fp);
}
mysqli_close($myconn);
?>
对 str_replace()
的调用应该删除双引号。可能发生的情况是 fputcsv()
是 "helpfully" 将它们放回原处。您可以尝试为可选的 enclosure 参数添加一个值(如果未提供,则默认为双引号)以查看输出中的双引号是否更改为其他内容。
fputcsv($fp, $row, "|", "^");
https://www.php.net/manual/en/function.fputcsv.php
如果事实证明是这种情况,那么您可能不得不手动输出数据,这样的事情可能会成功。
fwrite($fp, implode("|", $row));
我创建了一个脚本,可以将一堆 MySQL 表导出到 csv。脚本工作正常,除了我需要在将每一行放入 CSv 文件之前删除双引号。
我正在使用 str_replace,它在我需要替换任何 | 实例时有效。但是由于某种原因它不适用于双引号。我想我一定遗漏了一些明显的东西。
require_once 'mysqliconn.php';
$mysql_tables = array("OutputApplicationsView", "OutputComponentsView", "OutputDevicesView", "OutputDisksView", "OutputInstalledSoftwareView", "OutputModulesView", "OutputOraclePTVView", "ScopeListView");
foreach ($mysql_tables as $mysql_table) {
echo "<br> Exporting $mysql_table to CSV file. Please wait.</br>";
$sql = "SELECT * FROM ". $mysql_table . " LIMIT 10";
$stmt = $myconn->prepare($sql);
if($stmt === false) {trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $myconn->error, E_USER_ERROR);}
$execute = $stmt->execute();
if($execute === false) {trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $myconn->error, E_USER_ERROR); exit;}
$results = $stmt->get_result();
$array = $results->fetch_all(MYSQLI_ASSOC);
$file = $mysql_table . ".txt";
$fp = fopen($file, 'w');
foreach ($array as $row) {
$row = str_replace("|", ":", $row); //works fine
$row = str_replace('"', '', $row); //this part won't work.
$row = preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x9F]/u', '', $row);
$row = preg_replace('/[\x00-\x1F\x7F-\xA0\xAD]/u', '', $row);
fputcsv($fp, $row, "|");
}
fclose($fp);
}
mysqli_close($myconn);
?>
对 str_replace()
的调用应该删除双引号。可能发生的情况是 fputcsv()
是 "helpfully" 将它们放回原处。您可以尝试为可选的 enclosure 参数添加一个值(如果未提供,则默认为双引号)以查看输出中的双引号是否更改为其他内容。
fputcsv($fp, $row, "|", "^");
https://www.php.net/manual/en/function.fputcsv.php
如果事实证明是这种情况,那么您可能不得不手动输出数据,这样的事情可能会成功。
fwrite($fp, implode("|", $row));