Исчезает часть кирилицы при чтении fgetcsv

asics

Новичок
Исчезает часть кирилицы при чтении fgetcsv

Разбираю данные из файла *.tsv через fgetcsv

Структура файла:
vodka премиум [табуляция] http://url1
премиум vodka [табуляция] http://url2
премиум водка [табуляция] http://url3

При разборе 1 строки всё корректно:
$data[0]='vodka премиум'
$data[1]='http://url1

При разборе 2 строки исчезает кириллическое слово спереди:
$data[0]='vodka'
$data[1]='http://url2'

При разборе 3 строки исчезает кириллическое словосочетание целиком:
$data[0]=''
$data[1]='http://url3'

Т.е. исчезают кириллические символы стоящие до латинских в $data[0].

Пробю на 2 хостингах на одном такой проблемы нет, на втором есть.

Код разборщика:
PHP:
$row = 1;
if (($handle = fopen("sale.tsv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, "	")) !== FALSE) {
        $num = count($data);
        echo "$num fields in line $row: <br>";
        $row++;
        
         echo '<br>'.$data[0].'<br>'.$data[1];
	
        }
   
    fclose($handle);
}
Сначала грешил на кодировку, но исчезает не вся кириллица... В гуугле не нашел ничего, куда копать?
 

asics

Новичок
Спасибо за быстрый ответ, я читал про локаль, везде рекомендуют вызывать setlocale (LC_ALL, 'ru_RU.cp1251'); перед
fgetcsv, но мне не помогло... проблема осталась.
 

dimagolov

Новичок
asics, тебе голова чтобы думать, или чтобы в нее есть?

раз у тебя в одном месте работает, а в другом нет и тебе дают совет про локаль, то нужно не магические заклинания вызывать, а для начала проверить какая у тебя локаль там, где работает, а какя там, где нет. если они различны, то ставить ту, что работает, но не просто ставить, а еще и проверять стала ли она или нет (так как не на всех серверах все локали в наличии). если они совпадают, то делать вывод, что проблема не в локалях.
 

fixxxer

К.О.
Партнер клуба
о, внезпано информация поступила - таки 1251. (видимо, все должны были догадаться, что кто-то еще в прошлом веке).

на юниксовых серверах такое зачастую просто не установлено, и по умолчанию стоит utf-8. проверяй, если надо - доустанавливай (или проси админа).

хотя, вообще, задача разбора csv с учетом каких угодно кодировок и локалей столь тривиальна, что давно бы сам написал.
 

asics

Новичок
Спасибо за помощь, разобрался. На сервере не было локали win1251. Обратился в саппорт- поставили, теперь работает как часы.

PS Я же не сисадмин, откуда я знал, что локали какие-то на сервере существуют...
 

dimagolov

Новичок
ты не незнал про сервер. ты:
1. не думал головой
2. не читал ман
3. не отлаживал код

если бы ты это все делал, то факт отсутствия локали выявил без пинков, а сам. кстати, никогда не нужно оправдываться. сделал глупость, тебе на нее указали, сказал спасибо, приобрел опыт и больше ее не повторяешь.
 
Сверху