#php #csv
#php #csv
Вопрос:
У меня есть шаблон .csv, который я бы хотел, чтобы люди заполняли, сохраняли и загружали.
Проблема заключается в следующем, предполагая, что некоторые пользователи будут вставлять скрытые разрывы строк в строке, при использовании fgetcsv() он будет выводить строку, разбитую скрытыми разрывами строк.
Как я могу избежать разрыва строки или очистить свои данные?
Возможное решение:
предположим, что первая строка верна, $count = подсчитывает количество разделителей до разрыва строки, перестраивает текст в массив до тех пор, пока $count;
но я думаю, что доступны лучшие варианты.
ПОСЛЕДУЮЩЕЕ РЕДАКТИРОВАНИЕ
Вот входные данные *ВАЖНО[ ! ]: данные внутри файла Excel «в порядке», они не повреждены, это одна строка!!! сохранение его в виде файла csv и открытие его в блокноте показывает следующее
asd;"asd
asd
asd";asd;asd
Вот код
$handle = fopen("file.csv","r");
$data = fgetcsv($handle,";");
while($data = fgetcsv($handle)) {
$array = explode(";",$data[0]);
print_r($array);
}
fclose($handle);
Вот отраженные данные
Array ( [0] => asd [1] => "asd ) Array ( [0] => asd ) Array ( [0] => asd" [1] => asd [2] => asd [3] => )
Спасибо
Комментарии:
1. Что вы имеете в виду под «скрытой строкой»?
2. откройте файл Excel и введите что-нибудь, затем нажмите alt enter, затем введите еще что-нибудь
3. @christi … затем сохраните этот файл в формате csv и прочитайте его с помощью fgetcsv(). Удивлен? Где все ваши воображаемые разорванные строки?
Ответ №1:
очень легко проверить ваш случай и увидеть, что нет прерывистых строк, если поля правильно заключены в кавычки.
Итак, строка CSV, подобная этой
1,"joe
""Big Coyote""
Hopkins",598600
будет прочитано без единой проблемы.
Комментарии:
1. допустим, я бы создал скрипты, которые следуют некоторым предсказуемым шаблонам, но я ожидаю, что мои пользователи могут отправлять неправильные данные, поэтому я хотел бы удалить разрывы строк внутри строк, я постараюсь разобраться в этом самостоятельно, спасибо за лекцию
2. и, наконец, изменил мой скрипт, и он, наконец, работает, пока ($data = fgetcsv($handle,1000,’;’,'»‘)) print_r($data); я мог бы извиниться за то, что недостаточно ясно изложил свою проблему, но все, что я читал дальше php.net и я действительно не мог этого понятьвыход.