powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / fgetcsv не отображает кириллицу
24 сообщений из 49, страница 2 из 2
fgetcsv не отображает кириллицу
    #37100777
SovaBarmak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NT Man,

Код: plaintext
1.
2.
3.
test  for  ru_RU.utf8=ru_RU.utf8
test  for  en_US.utf8=en_US.utf8

...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #37100784
NT Man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тогда мой код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<?php
	 header ('Content-type: text/html; charset=utf-8');
	 if (! setlocale (LC_ALL, 'ru_RU.utf8'))  setlocale (LC_ALL, 'en_US.utf8');
	 if ( setlocale (LC_ALL,  0 ) == 'C')  die ('Не поддерживается ни одна из перечисленных локалей (ru_RU.utf8, en_US.utf8)');

	$handle =  fopen ('php://memory', 'w+');
	 fwrite ($handle,  iconv ('CP1251', 'UTF-8',  file_get_contents ('test.csv')));
	 rewind ($handle);
	 while  (($row =  fgetcsv ($handle,  1000 , ';')) !==  false )  print_r ($row);
	 fclose ($handle);
?>
полностью решает Вашу проблему, не понимаю что у Вас не так.
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #37100786
NT Man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В догонку исходная кодировка csv какая?
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #37100814
SovaBarmak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
windows 1251 как ексель сохраняет...
может я как то не так делаю, я пытаюсь настроить компонент джумлы импорта таблиц и в файлах компонента я нашел что отвечает за преобразования кодировки
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
				@ setlocale (LC_ALL, 'ru_RU.CP1251');
				$handle =  fopen ($filename, "r");
				 while  (($data =  fgetcsv ($handle,  0 , ';' )) !==  FALSE )
				{
					 if (  count ($data)== 0  )
					{
						// fgetcsv creates a single null field for blank lines - we can skip them...
					}
					 else 
					{
					    $num =  count ($data);
					     for  ($c= 0 ; $c < $num; $c++) {
					        $data[$c] =  iconv ("Windows-1251", "UTF-8", $data[$c]);
					    }
						//print_r ($data);
						$CSVTableArray[] = $data;	// We store the row array
//						if($row == 0) { $msg .= print_r($data, TRUE) . '| <BR />'; }	// Only used in debug
//						$row++; 					// We increment to the next row for debug msgs
					}
				}

				 fclose ($handle);

я так понимаю мне просто нужно написать так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
				 header ('Content-type: text/html; charset=utf-8');
	                        if (! setlocale (LC_ALL, 'ru_RU.utf8'))  setlocale (LC_ALL, 'en_US.utf8');
	                        if ( setlocale (LC_ALL,  0 ) == 'C')  die ('Не поддерживается ни одна из перечисленных локалей (ru_RU.utf8, en_US.utf8)');

				$handle =  fopen ($filename, "r");
				 while  (($data =  fgetcsv ($handle,  0 , ';' )) !==  FALSE )
				{
					 if (  count ($data)== 0  )
					{
						// fgetcsv creates a single null field for blank lines - we can skip them...
					}
					 else 
					{
					    $num =  count ($data);
					     for  ($c= 0 ; $c < $num; $c++) {
					        $data[$c] =  iconv ("Windows-1251", "UTF-8", $data[$c]);
					    }
						//print_r ($data);
						$CSVTableArray[] = $data;	// We store the row array
//						if($row == 0) { $msg .= print_r($data, TRUE) . '| <BR />'; }	// Only used in debug
//						$row++; 					// We increment to the next row for debug msgs
					}
				}

				 fclose ($handle);

но так не работает(, кирилица отображается нормально только, если перед ней идет хоть 1 латинский символ
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #37100859
SovaBarmak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спааааасибо, помогло))) я ведь не разобрался сначала, что к чему, я ж говорю тока начал учить php, а теперь все прочитал, вдумался в код и переделал свой и теперь работает)))
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #37109178
Новенький чайник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SovaBarmak,
Кирилические символы бери в кавычки и будет щастье!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
fgetcsv не отображает кириллицу
    #37773603
Фотография Admin_Vlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Та же проблема. Не выводятся строки если первый символ русская буква. Добавил iconv - стало выводить "NULL" :-(
http://stretchfilm.byethost13.com/2006-2011.php

Кто может сказать в чем ошибка?

phpinfo():
http://stretchfilm.byethost13.com/phpinfo.php
Accept-Charset windows-1251,utf-8;q=0.7,*;q=0.3

csv-файл в ANSI:
http://stretchfilm.byethost13.com/1.csv

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
<?php
ini_set('php_flag display_errors','on'); 
ini_set('php_value error_reporting', E_ALL);

	header('Content-type: text/html; charset=utf-8');
	if(!setlocale(LC_ALL, 'ru_RU.utf8')) setlocale(LC_ALL, 'en_US.utf8');
	if(setlocale(LC_ALL, 0) == 'C') die('Не поддерживается ни одна из перечисленных локалей (ru_RU.utf8, en_US.utf8)');

	$row = 1;
	if (($handle = fopen("1.csv", "r")) !== FALSE) {
		while (($data = iconv('CP1251', 'UTF-8', fgetcsv($handle, 1000, ";"))) !== FALSE) {
		echo var_dump($data);

			if ($data[5]=="ШТЛ"){$shtl=$shtl+1;}
			 if ($data[5]=="В"){$v=$v+$data[6];}
			 if ($data[5]=="ВСВ"){$vsv=$vsv+$data[6];}
			 if ($data[5]=="ВЮВ"){$vuv=$vuv+$data[6];}
			 if ($data[5]=="З"){$z=$z+$data[6];}
			 if ($data[5]=="ЗСЗ"){$zsz=$zsz+$data[6];}
			 if ($data[5]=="ЗЮЗ"){$zuz=$zuz+$data[6];}
			 if ($data[5]=="С"){$s=$s+$data[6];}
			 if ($data[5]=="СВ"){$sv=$sv+$data[6];}
			 if ($data[5]=="СЗ"){$sz=$sz+$data[6];}
			 if ($data[5]=="ССВ"){$ssv=$ssv+$data[6];}
			 if ($data[5]=="ССЗ"){$ssz=$ssz+$data[6];}
			 if ($data[5]=="Ю"){$u=$u+$data[6];}
			 if ($data[5]=="ЮВ"){$uv=$uv+$data[6];}
			 if ($data[5]=="ЮЗ"){$uz=$uz+$data[6];}
			 if ($data[5]=="ЮЮВ"){$uuv=$uuv+$data[6];}
			 if ($data[5]=="ЮЮЗ"){$uuz=$uuz+$data[6];}
			$row++;

		}


			$v=$v+$vsv+$vuv;
			$z=$z+$zsz+$zuz;
			$s=$s+$ssv+$ssz;
			$u=$u+$uuv+$uuz;
	}
fclose($handle);
?>
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #37773621
NT Man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Admin_Vlad,

вы мое сообщение 10192716 читали вообще?

Ваша ошибка что вы в UTF-8 переводите текст после разбора а надо до.
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #37773671
Фотография Admin_Vlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, читал несколько раз. Объясните пожалуйста "на пальцах"
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #37773692
NT Man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Admin_Vlad,

1) У меня fopen открывает не файл а поток в памяти на запись.
Код: php
1.
$handle = fopen('php://memory', 'w+');


2) В этот созданный поток в памяти я сохраняю файл перекодированный в UTF-8
Код: php
1.
fwrite($handle, iconv('CP1251', 'UTF-8', file_get_contents('test.csv')));
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #37773717
Фотография Admin_Vlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слишком лаконично...
Так?


Код: php
1.
2.
3.
	if (($handle = iconv('CP1251', 'UTF-8', fopen("1.csv", "r"))) !== FALSE) {
		while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
		echo var_dump($data);
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #37773734
NT Man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Admin_VladСлишком лаконично...
Так?


Код: php
1.
2.
3.
	if (($handle = iconv('CP1251', 'UTF-8', fopen("1.csv", "r"))) !== FALSE) {
		while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
		echo var_dump($data);




Я вижу бред, fopen возвращает файловый дескриптор для работы таких функций как fgetcsv , файловый дескриптор != string и его нельзя засовывать в iconv для конвертации.
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #37773752
Фотография Admin_Vlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я понимаю, что бред. Не могли бы Вы запостить рабочий отрывок для чтения из .csv?
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #37773758
NT Man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Admin_VladЯ понимаю, что бред. Не могли бы Вы запостить рабочий отрывок для чтения из .csv?

10192716
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #37773797
Фотография Admin_Vlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Без php://memory этого не сделать?
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #37773811
Фотография Admin_Vlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблему решил с помощью вот этой библиотечки:
http://forum.dklab.ru/viewtopic.php?t=9549


Код: php
1.
2.
3.
4.
5.
6.
7.
require_once "File/FGetCSV.php";
$cfg_File="1.csv";

$f = @fopen($cfg_File, "r") or die("Could not open \"$cfg_File\" - ".$php_errormsg);
while ($data = File_FGetCSV::fgetcsv($f, 65536, ";")) {
//
}
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #37773812
NT Man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Admin_VladБез php://memory этого не сделать?

нет
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #37819588
DenisAkhunov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NT Man,
Большое-пребольшое спасибо!
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #37819643
NT Man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На больших объемах данных php://memory лучше заменить на php://temp
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #37822371
medviva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
большой обьем, это от скольки? или php://temp лучше в любом случае?
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #37901112
suxo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если кому интересно. у меня fgetcsv тоже не воспринимал кириллицу. Воспринимал только если в строке(между ; ) стояли цифры или точка - то после этих символов кирилица писалАсь.

что я сделал:
на сервере выполнил:
localedef -c -i ru_RU -f CP1251 ru_RU.CP1251

в файле php написал

setlocale(LC_ALL, "ru_RU.CP1251");

все. после этого все замечательно стало читаться.
Если у вас не свой сервер то ... не знаю :)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
fgetcsv не отображает кириллицу
    #38549487
basil5007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NT Man,

Ну просто сразу помогло! Чудно!

Спасибо!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
fgetcsv не отображает кириллицу
    #39678749
Lion28
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может кому пригодится. Написал свою функцию для обработки строки в массив csv
Обращаться почти так же:
($str=fgetreadcsv($file))!==false

Со своим разделителем и экранированием:
($str=fgetreadcsv($file,$разделитель;$экранирование))!==false
По умолчанию ; и "

Поддерживает перенос строк в экранированной ячейке:
1;2;"строка с переносом
строк";3;кириллица

В случае ошибки в синтаксисе строки вернёт пустую строку, в случае конца файла вернёт false.
Файл должен быть utf-8. К сожалению кодировку нельзя менять построчно.

function fgetreadcsv(&$file,$delimiter=';',$ecran='"'){
$mas=array(); $open=false; $cell='';
do{
$s=fgets($file);
if($s!==false){
$col=strlen($s);
$k=0;
while($k<$col){
if($open){
if($s[$k]==$ecran){
if($k+1==$col){ $mas[]=$cell; $cell=''; $open=false; }else{
if($s[$k+1]==$ecran){ $cell.=$s[$k]; $k++; }else{
if($s[$k+1]==$delimiter){ $open=false; }else{ $mas=''; $k=$col; };
};
};
}else{ $cell.=$s[$k]; };
}else{
if($s[$k]==$delimiter){
$mas[]=$cell; $cell='';
if($k+1==$col){ $mas[]=$cell; };
}else{
if($s[$k]==$ecran){
if($cell!=''){ $mas=''; $k=$col; }else{ $open=true; };
}else{
$cell.=$s[$k];
if($k+1==$col){ $mas[]=$cell; $cell=''; };
};
};
};
$k++;
};
}else{
$mas=false;
};
}while($open);
return $mas;
};
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #39679387
Lion28
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lion28,

Поправка.
После
$col=mb_strlen($s);
Добавить
while($col>0 && ($s[$col-1]=="\n" || $s[$col-1]=="\r")){$col-=1;};

А если сам файл php имеет кодировку window-1251 то после
if($s!==false){
Добавить
$s=iconv('utf-8', 'Windows-1251', $s);
...
Рейтинг: 0 / 0
24 сообщений из 49, страница 2 из 2
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / fgetcsv не отображает кириллицу
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]