2015-09-29 2 views
2

У меня есть форма, которая передает данные в файл csv. Когда пользователь вводит запятую в поле, он разрушает мою структуру csv. Я хочу преобразовать введенные запятые, чтобы они могли отображаться как символ.PHP: запись запятой в файл csv

Я попытался это:

$_POST["field"] = str_replace(",", "','", $_POST["field"]); 
+0

Что вы используете для создания CSV-файла? –

+0

использовать phpExcel для получения результата. –

+1

Правильная структура CSV состоит в том, что каждый столбец должен быть обернут двойными кавычками, а затем любые двойные кавычки внутри должны быть экранированы. –

ответ

0

Наверное, не самый лучший ответ, но он работает.

Вы могли бы заменить запятую со случайной строки при вводе в CSV, как показано ниже:

$commastring = str_replace(",", "/zwdz/", $tempstring); 

и тогда, когда вам нужно выводить запятую где-то на вашем сайте (если веб-сайт базы данных) вы можете сделать противоположностью str_replace

0

Использование HTML кодирования для мгновенного облегчения, но все-таки моя рекомендация использовать PHPExcel

$comma="&#44"; 
$_POST["field"] = str_replace(",", $comma, $_POST["field"]); 
+0

Почему бы вам порекомендовать всю другую библиотеку, когда PHP поддерживает CSV из коробки с 'fputcsv' и' fgetcsv'? Кроме того, если вы собираетесь кодировать одну вещь, почему бы не кодировать всю строку должным образом, а не просто взломать один объект HTML? –

+0

Это сработало хорошо, спасибо! Если вы не хотите использовать fputcsv(), это решение очень хорошо. – coder

+0

@JonStirling, CSV обозначает разделенные запятыми значения. Вы не можете достичь дополнительных функциональных возможностей, потому что CSV-файл не поддерживает стили шрифтов и т. Д., Поэтому я не рекомендовал не подчеркивать .. в целом, спасибо за ваш полезный совет. –

2

Вы можете использовать fputcsv(), и fgetcsv(), чтобы прочитать файл, он автоматически преобразует вашу строку.

Простой пример для записи данных:

$csv = fopen('file.csv', 'w'); 
$array = array($csv); 
fputcsv($csv, $array); 

И чтение данных:

$csv = fopen('file.csv','r'); 
print_r(fgetcsv($csv)); 
+1

+1 потому что imo это правильный способ сделать это, но при условии, что пример будет долгим, чтобы сделать его «хорошим» ответом. –

+0

'fputcsv' принимает массив как второй параметр. –

+0

Спасибо @JonStirling, я отредактировал его. –

0

Вы можете избежать комы, как это:

$_POST["field"] = str_replace(",", "\,", $_POST["field"]); 

Или вы можете поместить строку в котировках

$_POST["field"] = "'".$_POST["field"]."'";