Проблема перевода строки из PHP в CSV - PullRequest
2 голосов
/ 10 февраля 2012

Я использую следующий код, чтобы получить данные из формы и сохранить их как CSV.

$cvsData = $name . "," . $address . "\n";

$fp = fopen("file.csv", "a");

if ($fp) {
    fwrite($fp, $cvsData); // Write information to the file
    fclose($fp); // Close the file
}

Когда кто-то вводит запятую или разрыв строки в поле адреса, это прерывает форматирование. Так как мне избежать этого, чтобы весь адрес оставался в одном поле?

Ответы [ 2 ]

4 голосов
/ 10 февраля 2012

Поместите каждый элемент данных в кавычки.Пара кавычек в кавычках означает одну кавычку.например,

"Daniel Norton","Congress Ave.
Austin (""Keeping it weird""), TX"

Ссылаясь на ваш пример:

$data = str_replace('"','""',$data);
$address = str_replace('"','""',$address);
$cvsData = "\"$data\",\"$address\"\n";

Еще лучше, просто используйте функцию PHP fputcsv .

fputcsv($fp,array($data,$address));
0 голосов
/ 10 февраля 2012

CSV полностью зависит от программного обеспечения, используемого для его чтения.

Посмотрите http://www.csvreader.com/csv_format.php, чтобы узнать, как определенные программы ожидают данные CSV.

Я создал класс CSV, который может справиться с большинством из этих ситуаций. Возможно, вы захотите взглянуть на это.

https://gist.github.com/1786683

И чтобы ответить на ваш вопрос, используя этот класс, вы могли бы

$csv = CSV::newExcel();
$cvsData = $csv->row($name, $address);
// etc...
...