Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Парсер CSV и кодировка
 
 автор: Ats   (26.02.2009 в 08:30)   письмо автору
 
 

Есть некий CSV парсер )

<?php
error_reporting
(E_ALL E_NOTICE);
  
$file $_POST['file'];
  
$csv_lines  file("book1.csv");
  if(
is_array($csv_lines))
  {
    
//разбор csv
    
$cnt count($csv_lines);
    for(
$i 0$i $cnt$i++)
    {
      
$line $csv_lines[$i];
      
$line trim($line);
      
//указатель на то, что через цикл проходит первый символ столбца
      
$first_char true;
      
//номер столбца
      
$col_num 0;
      
$length strlen($line);
      for(
$b 0$b $length$b++)
      {
        
//переменная $skip_char определяет обрабатывать ли данный символ
        
if($skip_char != true)
        {
          
//определяет обрабатывать/не обрабатывать строку
          ///print $line[$b];
          
$process true;
          
//определяем маркер окончания столбца по первому символу
          
if($first_char == true)
          {
            if(
$line[$b] == '"')
            {
              
$terminator '";';
              
$process false;
            }
            else
              
$terminator ';';
            
$first_char false;
          }

          
//просматриваем парные кавычки, опредляем их природу
          
if($line[$b] == '"')
          {
            
$next_char $line[$b 1];
            
//удвоенные кавычки
            
if($next_char == '"')
              
$skip_char true;
            
//маркер конца столбца
            
elseif($next_char == ';')
            {
              if(
$terminator == '";')
              {
                
$first_char true;
                
$process false;
                
$skip_char true;
              }
            }
          }

          
//определяем природу точки с запятой
          
if($process == true)
          {
            if(
$line[$b] == ';')
            {
               if(
$terminator == ';')
               {

                  
$first_char true;
                  
$process false;
               }
            }
          }

          if(
$process == true)
            
$column .= $line[$b];

          if(
$b == ($length 1))
          {
            
$first_char true;
          }

          if(
$first_char == true)
          {

            
$values[$i][$col_num] = $column;
            
$column '';
            
$col_num++;
          }
        }
        else
          
$skip_char false;
      }
    }
  }
   
var_dump($values);

?>


Но данные выводить в формате
">2>: 1’K’я 03>"

Как исправить текущую проблему? ЗАранее спасибо

  Ответить  
 
 автор: sim5   (26.02.2009 в 08:40)   письмо автору
 
   для: Ats   (26.02.2009 в 08:30)
 

А не проще ли fgetcsv() ?

  Ответить  
 
 автор: Ats   (26.02.2009 в 08:55)   письмо автору
 
   для: sim5   (26.02.2009 в 08:40)
 

Да там тоже с кодировкой беда.Да и мне без него поудобнее и привычнее)

  Ответить  
 
 автор: sim5   (26.02.2009 в 09:00)   письмо автору
 
   для: Ats   (26.02.2009 в 08:55)
 

Применение этой функции намного проще. Впрочем дело ваше. А вот кодировка, так это ни как не связано с функцией как таковой, а с проблемами вывода - файл имеет кодировку например utf, а вы работаете как с 1251, или наоборот. Вот разберитесь в какой кодировке ваши исходные файлы, решите проблему свою.

  Ответить  
 
 автор: Ats   (26.02.2009 в 09:02)   письмо автору
 
   для: sim5   (26.02.2009 в 09:00)
 

А как изменить вывод кодировки?

  Ответить  
 
 автор: sim5   (26.02.2009 в 09:52)   письмо автору
 
   для: Ats   (26.02.2009 в 09:02)
 

Передавая соответсвующий заголовок, либо укзаывать соответствующую в метатеге. Но... Если вы знаете, что ваш csv-файл, например, в кодировке utf-8, а весь сайт работает с кодировкой 1251, то не зачем переводить из-за одного файла кодировку всего сайта, достаточно воспользоваться функцией iconv() и преобразовать csv-файл в кодировку 1251 при его разборе/записи/выводе. Что у вас за кодировка, я не знаю, повторяю, разбиритесь что у вас в чем - решите проблему.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования