CSV-файл с разделителем, отличным от запятой в PHP
Я вставляю данные в таблицу как массовую загрузку, $handle = fopen($_FILES['file_clg']['tmp_name'], "r");
fgetcsv($handle);
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$collegename = trim(str_replace(array("’","'"),"'",$data[0]));
$description = trim(str_replace(array("’","'"),"'",$data[1]));
$sql1 = $db->selectquery("insert into $tbl(name,details)values('" .$collegename."','" .$description."')");
}
fclose($handle);
Здесь упоминаются только два поля: более 25 столбцов в моем CSV для массовой загрузки
Проблема заключается в том, что разделитель csv - это запятая (','), но в некоторых случаях содержимое поля "детали" включает запятые, так как в этом случае запись вставлена неправильно.
как решить это дело???
И проблема в разделе вставки,
Название колледжа: Инженерно-технологический институт Альвы (AIET)
и его сохраняют в виде таблицы в следующем формате:
Институт инженеров и технологий Alvas (AIET)
Я пытаюсь ниже код:
$collegename = htmlentities(iconv("cp1252", "utf-8", trim(str_replace(array("’","'"),"'",$data[0]))), ENT_IGNORE, "UTF-8");
но это не работает, как я могу решить проблему в одинарных кавычках
И я поместил: заголовок ("Content-Type: text/html; charset=ISO-8859-1");
в заголовок раздела..
1 ответ
Мне нужно было бы увидеть некоторые примеры, чтобы сказать что-нибудь с уверенностью, но есть спецификации для цитирования значений с запятыми, чтобы сохранить счетчик значений. /questions/27429214/rabota-s-zapyatyimi-v-fajle-csv/27429233#27429233
Кроме того, вы можете создать новый fputcsv()
блок кода, который будет генерировать CSV-файл с разделителями точкой с запятой (или другим неконфликтующим символом). Я не предоставляю фактический фрагмент для этого. Есть много доступных ресурсов на SO, в том числе:
- php fputcsv использует точку с запятой в CSV
- Экспорт в CSV через PHP
- PHP Как конвертировать массив в CSV с помощью функции fputcsv
Тогда ваш цикл while может использовать ;
(или что угодно) в качестве разделителя.
Что касается безопасного размещения ваших значений (которые могут иметь одинарные кавычки) в запросе, используйте подготовленные операторы
// I realize your query will be much larger than the sample...
// declare $collegename and $decription values
$stmt=$db->prepare("INSERT INTO `$tbl` (`name`,`details`) VALUES (?,?)");
$stmt->bind_param("ss", $collegename,$description);
if($stmt->execute()){
echo "success";
}else{
echo "Error: ",$db->error;
}