powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / fgetcsv не отображает кириллицу
49 сообщений из 49, показаны все 2 страниц
fgetcsv не отображает кириллицу
    #36022170
PVB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Прошу уточнить почему может не работать функция fgetcsv .
(На хостинге не работает!!! , на Win Apache дома все хорошо.)

Простой пример кода:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
$f = fopen("_blank_service.csv", "rt") or die("Ошибка!");
for ($i= 0 ; $data=fgetcsv($f, [b]1000 ,";");[/b] $i++) 
{  $num = count($data);  
echo "<h3><FONT class=mid_2>Строка номер $i (полей: $num):</h3>";  
for ($c= 0 ; $c<$num; $c++)    
print "[$c]: $data[$c]<br>"; 
}
fclose($f);

Содержимое файла _blank_service.csv:

dress;read;100
подшить;read;200
the cars;read;300
the cars;читает;300
брюки;мужские;100
подшить_пhодшить ;;


Но код на странице отображает (нет кириллицы) это:

Строка номер 0 (полей: 3):
[0]: dress
[1]: read
[2]: 100

Строка номер 1 (полей: 3):
[0]:
[1]: read
[2]: 200

Строка номер 2 (полей: 3):
[0]: the cars
[1]: read
[2]: 300

Строка номер 3 (полей: 3):
[0]: the cars
[1]:
[2]: 300

Строка номер 4 (полей: 3):
[0]:
[1]:
[2]: 100

Строка номер 5 (полей: 3):
[0]: _пhодшить низ изделия
[1]:
[2]:


если убрать разделитель - fgetcsv($f,1000)
то киррилицу читает. но конечно не бьет по разделяемым блокам (выводит строками).
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #36022191
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте указать настройки локализации с помощью setLocale
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #36022205
PVB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov,

спасибо, попробую ,
но в принципе то , в чем проблема?

Версия PHP на хостинге, которая не поддерживает киррилицу при работе с CSV ?
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #36022208
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иногда помогает написать в тэге мета, как здесь на текущей странице написано (правой кнопкой "исходный код"), а сам файл (страничку) сохранить как ..., как нужно. И если всё будет как положено - всё будет работать. Хотя, может я и ошибаюсь.
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #36022219
Anjey aka PM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PVBно в принципе то , в чем проблема?

Версия PHP на хостинге, которая не поддерживает киррилицу при работе с CSV ? все проблемы от того, что вы даже на линку, вам под нос подсунутую, кликнуть не можете, хотя там очень понятно написано в чем проблема.
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #36022594
PVB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anjey aka PM,

Чего злой такой то?

Зашел я сразу по ссылке ( вам под нос подсунутую) конечно и попробывал, но не в этом причина.

Я вначале писал "если убрать разделитель - fgetcsv($f,1000)
то киррилицу читает . но конечно не бьет по разделяемым блокам (выводит строками).", то есть все таки дело не в
Код: plaintext
setlocale(LC_ALL, 'ru_RU.cp1251');

и в мета charset указан:
Код: plaintext
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">	
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #36022979
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PVB,

в какой кодировке сделан файл _blank_service.csv можете сказать?
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #36023165
PVB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov,

1251 ANSI кириллица
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #36023261
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PVB1251 ANSI кириллица
- ok
- а какая локализация у PHP? что пишет такой код:
Код: plaintext
<?php echo(setLocale(LC_ALL, NULL)); ?>
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #36023318
PVB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov,

Сейчас нет доступа к хостингу, смогу через 4-5 часов проверить.
Спасибо за внимание к моей проблеме.
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #36023423
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
- если Вам важно решить проблему, а не разобраться с работой функции fgetcsv, Вы можете попробовать код с explode:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
$f = fopen("_blank_service.csv", "rt") or die("Ошибка!");
for ($i= 0 ; $row=fread($f, 1000 ); $i++) 
{  
  $data=explode(';', $row);
  ... 
}
fclose($f);
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #36023429
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
- ups, только вместо fread нужно fgets :)
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #36024395
PVB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov,

Код: plaintext
1.
2.
print "Проверка чтения CSV файла<br>"; 
echo("Locale=".setLocale(LC_ALL, NULL));

на домашнем севачке возвращает:

Проверка чтения CSV файла
Locale=Russian_Russia.1251

А на хостинге:

Проверка чтения CSV файла
Locale=C


Этим
Код: plaintext
$data=explode(';', $row);
пользовался , спасибо.
Но нужно именно разобраться с функцией.
Почему она на хостинге не работает?
И к тому же Locale=C возвращает.
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #36024413
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PVB
Но нужно именно разобраться с функцией.
Почему она на хостинге не работает?
И к тому же Locale=C возвращает.
- а чего тут разбираться - стоит не та локаль которая нужна (как установить в локаль в коде уже было выше), если после попытки установить нужную локаль в коде ничего не происходит, т. е. локаль не устанавлиется, значит она не стоит на сервере (типично для забугорных хостингов). Если у Вас есть рутовый доступ к серверу - ставите нужную локаль на сервер (в Интернете есть инструкции как это делать), в противном случае пишите в суппорт хостеру просьбу добавить нужную локаль. Если ничего не вышло - меняете код или меняете хостинг :)
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #36024486
PVB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще :

как дополнительно выяснилась проблема с не неотображением кирилицы в принципе.
Она отображается , но только в случае, если до кириллицы стоят латинские символы , и при этом вся строка нормально отображается.

hhhhhhh после латинских букв отображает

А если кириллица стоит до латинских, то она съедается.
тут пусто < before latin letter not display
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
fgetcsv не отображает кириллицу
    #36737161
NT Man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не знаю актуальна ли задача для автора темы, но хочу внести свои 5 копеек.
1) Что-бы посмотреть список доступных локалей, достаточно в шеле выполнить locale -a.
2) Не обязательно ставить ru_RU.cp1251 локаль, единственное, кодировка файла должна соответствовать. На CentOS как правило из коробки куча локалей и достаточно установить локаль ru_RU, на Debian-е у меня только ru_RU.utf8, а на буржуйском сервере en_US.uft8.
Для более менее универсального решения проблемы топик стартера достаточен вот такой код:
Код: 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 не отображает кириллицу
    #36744604
tester2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NT Man, огромное спасибо! Ваши 5 коппеек сэкономили кучу времени))))
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #36919041
royx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Маялся с той же проблемой. Пять копеек от NT Man здорово мне помогли.
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #37100545
SovaBarmak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PVBИ еще :

как дополнительно выяснилась проблема с не неотображением кирилицы в принципе.
Она отображается , но только в случае, если до кириллицы стоят латинские символы , и при этом вся строка нормально отображается.

hhhhhhh после латинских букв отображает

А если кириллица стоит до латинских, то она съедается.
тут пусто < before latin letter not display


а метод описаный 2на 2 поста выше решает проблему, которую описал PVB?
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #37100664
SovaBarmak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и еще это
Код: plaintext
<?php  echo ( setLocale (LC_ALL,  NULL )); ?>
выдает
Код: plaintext
Locale=C

И еще я не очень силен в этом всем, тока разбераюсь, но ведь если кирилица идет после латинских или запятой или цифры то вносится в бд нормально, а если первым символом идет кирилица то ячейка пустая. Вроде ж кодировку поняло как бы..

И еще если сначала кирилица а потом любой символ латиницы или буква или цифра то все будет после него отображатся и латиница и кирилица.

Что за полторгейст то такой?
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #37100669
NT Man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Введите в консоли:
locale -a
И вставьте сюда вывод.
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #37100696
SovaBarmak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NT ManВведите в консоли:
locale -a
И вставьте сюда вывод.

Сори я ж сказал, что тока начынаю изучать все, что за консоль?
у меня эта проблема на сайте при импроте csv файла в бд, а консоль я так понимаю это с сервером что-то связано?
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #37100703
NT Man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SovaBarmakСори я ж сказал, что тока начынаю изучать все, что за консоль?
у меня эта проблема на сайте при импроте csv файла в бд, а консоль я так понимаю это с сервером что-то связано?
Ей богу не понимаю php програмистов на знающих *nix и консоль.
Да речь о сервере работа php очень сильно зависит от настроек сервера, поэтому я прошу подключиться через putty к серверу и набрать в консоли locale -a, результат скопировать и напечатать тут.
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #37100740
SovaBarmak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NT ManЕй богу не понимаю php програмистов на знающих *nix и консоль.
Да речь о сервере работа php очень сильно зависит от настроек сервера, поэтому я прошу подключиться через putty к серверу и набрать в консоли locale -a, результат скопировать и напечатать тут.

Я тока год в в этом всем ковыряюсь и опыта мало(, сайты кручу, раньше верстал тока, а совсем недавно начал понемногу разбиратся в php.

я прочитал про тот putty там вроде как нужен SSH логин и пароль их у меня нет(, это сайт знакомого он завтра будет, хотя незнаю или все равно получится, я у себя на хостинге смотрел в мой тарифный план не входит SSH доступ ( может и у него так
...
Рейтинг: 0 / 0
fgetcsv не отображает кириллицу
    #37100756
NT Man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тогда что выводят
Код: plaintext
1.
2.
3.
4.
5.
 echo ('test for ru_RU.utf8=');
 echo ( setlocale (LC_ALL, 'ru_RU.utf8'));
 echo ('<br>');
 echo ('test for en_US.utf8'=');
echo(setlocale(LC_ALL, 'en_US.utf8'));
...
Рейтинг: 0 / 0
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
49 сообщений из 49, показаны все 2 страниц
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / fgetcsv не отображает кириллицу
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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