//считываем файл в массив
$first_arr = file($_FILES['filename']['tmp_name']);
for($i = 0; $i < count($first_arr); $i++)
{
//определяем кодировку строки
$cod = mb_detect_encoding($first_arr[$i]);
//перекодируем в utf-8
$first_arr[$i] = iconv ($cod, 'utf-8', $first_arr[$i]);
}
но скрипт ругуется вот так
Notice: iconv() [function.iconv]: Detected an illegal character in input string in Z:\home\monitoring\www\admin\pharmacy\price_add_controller.php on line 81
строка 81 это
$first_arr[$i] = iconv ($cod, 'utf-8', $first_arr[$i]);
в массиве $first_arr данные попадают обрезанные, я так понимаю обрезает русские слова.
если сам csv файл предварительно открываю в Notepad++ и перекодирую его в UTF-8 без BOM то все считывается нормально и без перекодирования в скрипте.
Подскажите как мне решить задачку может надо в Exel как то по другому переводить в CSV формат или как перекодировать данные в PHP.
Спустя 4 минуты, 17 секунд (5.08.2011 - 21:52) Winston написал(а):
А если так попробовать
$first_arr[$i] = iconv ($cod, 'utf-8//TRANSLIT', $first_arr[$i]);
Спустя 10 минут, 14 секунд (5.08.2011 - 22:02) Invis1ble написал(а):
KonstantinK
Посмотри в сторону Spreadsheet_Excel_Reader, я с помощью него экспортировал из xls в БД
Посмотри в сторону Spreadsheet_Excel_Reader, я с помощью него экспортировал из xls в БД
Спустя 14 минут, 21 секунда (5.08.2011 - 22:17) KonstantinK написал(а):
Winston
Не не помогает, тоже самое выдает.
Invis1ble
Да я знаю про Spreadsheet_Excel_Reader , но с CSV вроде проще казалось должно получиться , может что придумаем все-таки.
Не не помогает, тоже самое выдает.
Invis1ble
Да я знаю про Spreadsheet_Excel_Reader , но с CSV вроде проще казалось должно получиться , может что придумаем все-таки.
Спустя 6 минут, 4 секунды (5.08.2011 - 22:23) Invis1ble написал(а):
KonstantinK
тогда попробуй mb_convert_encoding() или накрайняк convert_cyr_string()
и еще попробуй указывать явно исходную кодировку
кстати
тогда попробуй mb_convert_encoding() или накрайняк convert_cyr_string()
и еще попробуй указывать явно исходную кодировку
кстати
Цитата |
Notice: iconv() [function.iconv]: Detected an illegal character in input string |
у меня такое тоже выскакивало помню, хотя тетстировал с корректными кодировками. Потом пропал такой нотайс (то ли сам по себе, толи я заново сервер поднял)
Спустя 59 секунд (5.08.2011 - 22:24) Winston написал(а):
Цитата (KonstantinK @ 5.08.2011 - 21:48) |
mb_detect_encoding |
Может проблема в этой ф-е? Какой результат она возвращает? ASCII?
В $cod должно быть windows-1251
Спустя 2 минуты, 2 секунды (5.08.2011 - 22:26) Invis1ble написал(а):
Winston
Цитата |
Какой результат она возвращает? |
она пытается определить кодировку самостоятельно
Спустя 2 минуты, 40 секунд (5.08.2011 - 22:28) Winston написал(а):
Цитата (Invis1ble @ 5.08.2011 - 22:26) |
она пытается определить кодировку самостоятельно |
Это я понял, но, что она выдаст если написать
$first_arr = file($_FILES['filename']['tmp_name']);
echo mb_detect_encoding($first_arr[0]);
Что выведет? ASCII ?
Спустя 3 минуты, 49 секунд (5.08.2011 - 22:32) Invis1ble написал(а):
А, ты спрашиваешь у ТС, в какой кодировке файл....
Тут дело может быть в другом, а именно я же говорю, что тестировал с явным указанием кодировки, но все равно был нотайс. Вот. Читать начиная с 4-го поста.
Тут дело может быть в другом, а именно я же говорю, что тестировал с явным указанием кодировки, но все равно был нотайс. Вот. Читать начиная с 4-го поста.
Спустя 38 минут, 3 секунды (5.08.2011 - 23:10) KonstantinK написал(а):
Winston
Пробовал выводит "UTF-8" .
$first_arr = file($_FILES['filename']['tmp_name']);
echo mb_detect_encoding($first_arr[0]);
Пробовал выводит "UTF-8" .
Спустя 3 минуты, 48 секунд (5.08.2011 - 23:14) Winston написал(а):
Цитата (KonstantinK @ 5.08.2011 - 21:48) |
//определяем кодировку строки $cod = mb_detect_encoding($first_arr[$i]); //перекодируем в utf-8 $first_arr[$i] = iconv ($cod, 'utf-8', $first_arr[$i]); |
Цитата (KonstantinK @ 5.08.2011 - 23:10) |
Пробовал выводит "UTF-8" |
Хм... так может тогда не нужно здесь iconv ?
Спустя 4 минуты, 1 секунда (5.08.2011 - 23:18) Invis1ble написал(а):
Цитата |
Пробовал выводит "UTF-8" |
если так, то скорее всего не нужен )
Спустя 3 минуты, 55 секунд (5.08.2011 - 23:22) Invis1ble написал(а):
а если так:
?
$first_arr = file($_FILES['filename']['tmp_name']);
echo mb_detect_encoding(implode(PHP_EOL, $first_arr)); // больше инфы для анализа
?
Спустя 2 минуты, 47 секунд (5.08.2011 - 23:25) KonstantinK написал(а):
Invis1ble
тоже выдает UTF-8
тоже выдает UTF-8
Спустя 1 минута, 11 секунд (5.08.2011 - 23:26) Invis1ble написал(а):
KonstantinK
Цитата |
тоже выдает UTF-8 |
тогда зачем ковертировать пытаешься из UTF-8 в UTF-8 ?

Спустя 11 секунд (5.08.2011 - 23:26) Winston написал(а):
Странно... xls файл в формате utf-8

Спустя 9 минут, 25 секунд (5.08.2011 - 23:36) KonstantinK написал(а):
Invis1ble
Потому что без кодировки я получаю из csv файла вот такие кракозяблы
Может и вправду придется использовать Spreadsheet_Excel_Reader .
Потому что без кодировки я получаю из csv файла вот такие кракозяблы
5-��� 50�� ���. �/� �50 ������/Lek(������ ) ;112,50;
Может и вправду придется использовать Spreadsheet_Excel_Reader .
Спустя 2 минуты, 17 секунд (5.08.2011 - 23:38) Invis1ble написал(а):
KonstantinK
Цитата |
Потому что без кодировки я получаю из csv файла вот такие кракозяблы |
может проблема на уровне вывода?
Спустя 3 минуты, 22 секунды (5.08.2011 - 23:41) Invis1ble написал(а):
Вообще, странно конечно, что файл в UTF-8....
попробуй похимичить со вторым аргументом mb_detect_encoding()
попробуй похимичить со вторым аргументом mb_detect_encoding()
Спустя 3 минуты, 53 секунды (5.08.2011 - 23:45) Invis1ble написал(а):
KonstantinK
есть идея: скинь файл, я пробью его кодировку в enca, чтоб наверняка знать
есть идея: скинь файл, я пробью его кодировку в enca, чтоб наверняка знать
Спустя 6 минут, 39 секунд (5.08.2011 - 23:52) KonstantinK написал(а):
Invis1ble Вот погляди файл, а я уже спать. Отпишись, я завтра посмотрю если идей новых не возникнет то буду делать на Spreadsheet_Excel_Reader.
Хочется всегда попроще сделать, но не всегда удается
Хочется всегда попроще сделать, но не всегда удается

Спустя 3 минуты, 35 секунд (5.08.2011 - 23:55) Winston написал(а):
Файл в кодировке windows-1251 потому ее и нужно указывать в первом аргументе iconv
А не полагаться на mb_detect_encoding
Спустя 1 минута, 39 секунд Winston написал(а):
Файл перевел в utf8 теперь эксель крякозябры выдает
А не полагаться на mb_detect_encoding
Спустя 1 минута, 39 секунд Winston написал(а):
Файл перевел в utf8 теперь эксель крякозябры выдает

Спустя 4 минуты, 24 секунды (6.08.2011 - 00:00) Invis1ble написал(а):
KonstantinK
Гляди результаты:
how iconv calls the encoding
preferred MIME encoding name
RFC 1345 (or otherwise canonized) encoding name
how cstocs calls the encoding
Отсюда вывод - mb_detect_encoding() срабатывает некорректно.
Попробуй указывать явно исходную кодировку - CP1251.
Гляди результаты:
how iconv calls the encoding
CP1251
preferred MIME encoding name
windows-1251
RFC 1345 (or otherwise canonized) encoding name
CP1251
how cstocs calls the encoding
???
Отсюда вывод - mb_detect_encoding() срабатывает некорректно.
Попробуй указывать явно исходную кодировку - CP1251.
Спустя 19 минут, 52 секунды (6.08.2011 - 00:20) Invis1ble написал(а):
Вот неплохая статья, на мой взгляд по теме детекта кодировки. Развеивает надежды на mb_detect_encoding()

Спустя 10 часов, 11 минут, 17 секунд (6.08.2011 - 10:31) KonstantinK написал(а):
Winston
Invis1ble
Спасибо ребята, прямо указал кодировку cp1251 вроде заработало, я всегда знал что одна голова хорошо, а три лучше!
Invis1ble
Спасибо ребята, прямо указал кодировку cp1251 вроде заработало, я всегда знал что одна голова хорошо, а три лучше!

Спустя 9 часов, 8 минут, 28 секунд (6.08.2011 - 19:39) Invis1ble написал(а):
KonstantinK
Пожалуйста
Пожалуйста
