我正在通过 PHP 生成和导出 CSV,经过我的团队的一些修改,现在结果是在列内生成了双引号。我通过使用 CakePHP 控制台执行此 Shell 脚本,通过我的终端生成它。
/var/www/mysite.new/trunk/app/Console/cake Csv mysite.uk
问题是我已经尝试了很多技术来剥离它们,例如:stripslashes(), str_replace(), trim()
在我最后的修改中,我尝试应用 str_replace 函数。
foreach ($persons_csv as $person_csv){
/* The part where I get the data for stripping off the quotation marks */
$mail = $person_csv['Person']['email'];
$name = str_replace('"', '', $person_csv['Person']['name']);
$surname = str_replace('"', '', $person_csv['Person']['surname']);
/* REST OF THE CODE */
}
然而,它只发生在姓氏和名字中有一个以上的单词,其中正在生成引号。一个字组成的姓氏和名字,看起来还可以。不过,名称中可能存在一些异常,其中包含空格,因此会再次生成双引号。我不太清楚为什么会这样。我可以附上两个屏幕截图,以便您更好地了解问题。
如果您知道它可能是什么,那将非常感激。这是我生成 CSV 的其余代码。
private function addRow($row) {
$rows_deleted = 0;
if (!empty($row)){
fputcsv($this->buffer, $row, $this->delimiter, $this->enclosure);
} else {
return false;
}
}
private function renderHeaders() {
header("Content-type:application/vnd.ms-excel");
header("Content-disposition:attachment;filename=" . $this->filename);
}
private function setFilename($filename) {
$this->filename = $filename;
if (strtolower(substr($this->filename, -4)) != '.csv') {
$this->filename .= '.csv';
}
}
private function render($filename = true, $to_encoding = null, $from_encoding = "auto") {
if(PAIS) {
if ($filename) {
if (is_string($filename)) {
$this->setFilename($filename);
}
$this->renderHeaders();
}
rewind($this->buffer);
$output = stream_get_contents($this->buffer);
}
}
汪汪一只猫