Парсинг CSV файлов на PHP
В данной статье речь пойдет о распознавании формата CSV.
Что такое формат данных CSV, пояснять не буду, прочитайте об этом на http://ru.wikipedia.org/wiki/CSV.
И так, у меня был исходный файл в CSV формате, с кодировкой UTF-8, необходимо было его разобрать, для последующего заноса в базу данных.
Небольшой фрагмент этого файла
Имя;Фамилия;Мыло;Разное Максим;Нагайченко;max_nag[at]meta.ua;программист "?Мария";"????µ";intik_79[at]mail.ru; ;;some@email.com
Как видно здесь встречаются кириллица, латиница, умляуты (расширенная латиница).
Для парсинг я воспользовался стандартной ф-цией PHP — fgetcsv.
При разборе на виндовс машине вообще никаких проблем не возникло, все было разобрано, разложено — в общем все как надо, осталось только занести в БД.
При разборе этого файла на линукс машине возникли проблемы — кириллица вообще не хотела распознаваться, если она не была обрамлена — кавычкой («). Решение нашлось за 30 минут и выпитой чашкой чая.
Оказывается, необходимо указывать корректную локаль при работе с данной ф-цией, об этоя я прочитал в комментариях к указанной выше ф-ции.
setlocale(LC_ALL, 'ru_RU.UTF-8');
Если у вас в проекте используется несколько языков интерфейса, то при переключении, не забудьте переключить локаль. Особенно это важно, если для перевода интерфейса используется ф-ция gettext().
Всем удачи, Максим.
Статья просмотренна 73543 раз, зашло посетителей 26616
Парсим csv и tsv файлы в delphi…
Читая иностранные блоги, наткнулся на пост, в котором поднимается проблема парсинга и отображения в TStringGrid tsv файлов (tab-separated values – значения, разделенные символом табуляции, англ.). В таких файлах элементы в строках разделены знако…
Пожалуйста сделайте простой и ясный примерчик того же самого только для asp.net (можно для mvc — будет еще лучше)
Добрый день!
Я программист PHP, с технологиями Майкрософт не работал.
Помочь может ясный ум и Гугл.
ЗЫ Зачем юзать MVC для простого парсинга файлов?
Спасибо за пост. Очень помог побороть проблему с кириллицей.
Поделитесь исходниками!
Все исходники в мануале http://www.php.net/manual/ru/function.fgetcsv.php
вот так будет еще проще
function getArCsv($name){
$csv = array_map(‘str_getcsv’, file($name));
$arResult = array();
foreach($csv as $k => $c){
$val = explode(‘;’,$c[0]);
foreach($val as $key=>$v){
if($k == 0){
$n=$val;
}
$arResult[$k][$n[$key]] = $v;
}
}
unset($arResult[0]);
return $arResult;
}