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, в том числе:

Тогда ваш цикл 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;
}
Другие вопросы по тегам