вам не нужно переименовывать уже сохраненные файлы. вам надо перекодировать перед сохранением
и все ваши "онлайн -декодеры" несут чушь.
Глава 1 - это UTF-8, которая отображается как windows-1251
Дмитрий, вы можете понять, что проблема не в том что файлы приходят с именами в неверной кодировке, а в том, что только некоторые файлы приходят с именами в неверной кодировке? И попытка перекодировать всё скопом приведет к тому, что большая часть имен превратится в каракули?
но проблема здесь не в этом, а в том что файлы к вам приходят с именами в РАЗНЫХ кодировках - иногда в нормальной, иногда нет
или же вы что-то недоговариваете
Сергей delphinpro, большое спасибо, что открыли мне глаза. Сам бы я никогда не догадался, что это обычное отрицание.
Первый пример - это говнокод самого автора, если следить за его выступлениями на этом ресурсе. Причем при сравнении он имеет в виду именно значение переменной, а не результат isset. И его уже натыкали в это носом. Но поскольку до него очень долго всё доходит, он решил уточнить, правильно ли все понял.
так не бывает, чтобы одна и та же кодировка выводилась то нормально, то каракулями
. Глава - это utf-8, когда ее пытаются выводить как однобитную, например 1251
ну или как вариант - эти имена уже изначально битые
Надо еще добавить, что первый и сам по себе бессмысленный, поскольку сравнивает булево значение с числом. И в нормальном варианте должен писаться, как if(!isset($data[26])){
isset и empty - это не "положенные стандарты", а как раз наоборот - костыли. И я об этом в каком-то из комментариев уже писал.
Но главное - это сразу становится понятным, если немного подумать головой.
Эти ошибки, Undefined array key - они не для того, чтобы программист задолбался.
А вы их воспринимаете именно так. Вы считаете, что создатели языка заставляют вас везде писать isset и empty. Но это же глупость - писать код только для того, чтобы задавить сообщение об ошибке!
Задача этих ошибок не в том, чтобы программист все время как обезьяна везде писал isset и empty.
Любые сообщения об ошибках - служат для помощи программисту.
Данная ошибка подсказывает, что программист пытается обратиться к переменной, или элементу массива которых нет.
И увидев эту ошибку, программист не должен тупо затыкать ей рот через isset! А должен разобраться - почему вдруг нет нужной переменной.
То есть "положенные стандарты" - это чтобы переменная всегда была на месте.
Мало того что это сильно упрощает код - без всех этих isset и empty - но главное, эти ошибки начнут реально приносить пользу, когда программист реально ошибется в имени переменной или попытается обратиться к несуществующему элементу массива.
А то что вы делаете сейчас - это то же самое подавление ошибок, вид сбоку.
Причем array_pad - это тоже костыль. И по идее, надо приводить свои файлы в порядок, чтобы в них не было пустых ячеек. Но на данном этапе использование array_pad оправдано, поскольку приводит все массивы к единому виду. То есть делает то, что вы хотели изначально - чтобы if($arrdata[19]>0){ не вызывало ошибок. Потому что в $arrdata всегда будет нужное число колонок.
я же написал в ответе. array_pad добьёт недостающие колонки пустыми строками.
Например explode вернула 10 колонок, а надо 20.
Вот в array_pad написать 20 и в массиве будет 20 колонок - и ошибок не будет при обращении к любому элементу