Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Сохранение cvs в utf8 без BOM

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Telnet
Отправлено: 06 Ноября, 2015 - 15:34:43
Post Id


Частый гость


Покинул форум
Сообщений всего: 223
Дата рег-ции: Май 2011  


Помог: 1 раз(а)




Всем привет.
Нужно сохранять файл cvs обязательно в кодировке utf8 без BOM
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. /**
  5.  * Класс для работы с csv-файлами
  6.  * @author дизайн студия ox2.ru  
  7.  */
  8. class CSV {
  9.  
  10.     private $_csv_file = null;
  11.  
  12.     /**
  13.      * @param string $csv_file  - путь до csv-файла
  14.      */
  15.     public function __construct($csv_file) {
  16.         $handle = fopen($csv_file, "w");
  17.         if($handle){
  18.             fprintf($handle, chr(0xEF).chr(0xBB).chr(0xBF));
  19.             $this->_csv_file = $csv_file;
  20.         }else{
  21.             throw new Exception("Файл ".$csv_file." не найден");
  22.         }
  23.     }
  24.  
  25.     public function setCSVLine(Array $csv) {
  26.         //Открываем csv для до-записи,
  27.         //если указать w, то  ифнормация которая была в csv будет затерта
  28.         $handle = fopen($this->_csv_file, "a");
  29.         fputcsv($handle, $csv, ";"); //Записываем массив данных одной строкой, 3-ий параметр - разделитель поля
  30.         fclose($handle); //Закрываем
  31.     }    
  32. }
  33.  
  34. ?>
  35.  


Сначало было без fprintf($handle, chr(0xEF).chr(0xBB).chr(0xBF)); так писало в windows 1251, потом в нете нашел fprintf($handle, chr(0xEF).chr(0xBB).chr(0xBF)); поставил теперь пишется в utf8 с BOM, а нужно без BOM,
Прошу помочь разобраться.
 
 Top
Мелкий Супермодератор
Отправлено: 06 Ноября, 2015 - 15:48:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Telnet пишет:
в кодировке utf8 без BOM

И сами BOM и записываете. Странные люди.

Если fput передаёте utf8, то utf8 и будет записано. Остальное проблемы читателя, т.к. CSV предполагает, что писатель и читатель согласуют кодирование данных как-нибудь сами, без участия непосредственно файла данных.


-----
PostgreSQL DBA
 
 Top
esterio
Отправлено: 06 Ноября, 2015 - 17:04:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




Telnet пишет:
fprintf($handle, chr(0xEF).chr(0xBB).chr(0xBF));

Метка BOM
 
 Top
Telnet
Отправлено: 07 Ноября, 2015 - 11:42:22
Post Id


Частый гость


Покинул форум
Сообщений всего: 223
Дата рег-ции: Май 2011  


Помог: 1 раз(а)




Спасибо я знаю что это
fprintf($handle, chr(0xEF).chr(0xBB).chr(0xBF));
метка BOM
я ее для эксперимента добавил

если ее удалить то файл записывается в кодировке windows-1251
и приходится его каждый раз его перекодировать.

Так нужно перед записью перекодировать все в utf8
у меня там просто много полей в этот файл пишут нужно перед записью каждое поле перекодировать?
 
 Top
Telnet
Отправлено: 07 Ноября, 2015 - 14:40:05
Post Id


Частый гость


Покинул форум
Сообщений всего: 223
Дата рег-ции: Май 2011  


Помог: 1 раз(а)




Все разобрался короче каждое поле которое у нас не в utf 8 привожу к utf-8

и теперь все сохраняет в UTF-8
проблема как я понял была в том что не которые данные файл читал с инета а они видимо были как раз в windows-1251
 
 Top
esterio
Отправлено: 09 Ноября, 2015 - 13:09:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




Если нету меткы и все на латинице то некоторые редакторы показивають как cp1251 ибо латиница что там что в UTF-8 индентична
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Кодировки и все смежное »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB