Происходит странная вещь при переименовании файла, в чём может быть проблема?

Все файлы имеют стандартный вид: 11а.xlsx, то есть, это две цифры в начале и буква после них. Буква может быть как русской, так и английской, в случае если буква русская, то, к примеру, из файла 11а.xlsx должно получится 11aa.xlsx, то есть, мы заменяем букву кириллицы на латинскую и удваиваем её. Если буква будет английской, то мы оставляем все как есть.
Когда запускаю скрипт, то файлы с английскими буквами переносятся нормально, когда же количество файлов становится 166 и переименовываются сразу файлы с русскими буквами и остаются нетронутыми файлы с английскими буквами, то скрипт имеет особенность, связанной с тем, что он из, к примеру, 11а.xlsx делает 1.xlsx, в чём может быть проблема?
$letter = array('а' => 'aa', 'б' => 'bb', 'в' => 'vv', 'г' => 'gg', 'д' => 'dd', 'е' => 'ee', 'ё' => 'e', 'ж' => 'zh', 'з' => 'zz', 'и' => 'ii', 'й' => 'i', 'к' => 'k', 'л' => 'll', 'м' => 'mm', 'н' => 'nn', 'о' => 'oo', 'п' => 'pp', 'р' => 'rr', 'с' => 'c', 'т' => 'tt', 'у' => 'yy', 'ф' => 'ff', 'х' => 'hh', 'ц' => 'cc', 'ч' => 'ch', 'ш' => 'cz', 'щ' => 'scz', 'ы' => 'y', 'э' => 'ie', 'ю' => 'iu', 'я' => 'ja',);
$rest = substr("$filez[0]", 2,-5);
foreach($filez as $key => $val) {
if ($rest == "а" | $rest == "б" | $rest == "в" |  $rest == "г" | $rest == "д" | $rest == "е" | $rest == "ё" | $rest == "ж" | $rest == "з" | $rest == "и" | $rest == "й" | $rest == "к" | $rest == "л" | $rest == "м" | $rest == "н" | $rest == "о" | $rest == "п" | $rest == "р" | $rest == "с" | $rest == "т" | $rest == "у" | $rest == "ф" | $rest == "х" | $rest == "ц" | $rest == "ч" | $rest == "ш" | $rest == "щ" | $rest == "ъ" | $rest == "ы" | $rest == "ь" | $rest == "э" | $rest == "ю" | $rest == "я" ) {
$char = substr("$filez[$key]", 2,-5);
$numbers = substr($filez[$key], 0,-7);	
$changes = rename($filez[$key], "ratingTo/".$numbers."".$letter[$char].".xlsx");
}elseif ($rest == 'a' | $rest == 'b' | $rest == 'c' | $rest == 'd' | $rest == 'e' | $rest == 'f' | $rest == 'g' | $rest == 'h' | $rest == 'i' | $rest == 'j' | $rest == 'k' | $rest == 'l' | $rest == 'm' | $rest == 'n' | $rest == 'o' | $rest == 'p' | $rest == 'q' | $rest == 'r' | $rest == 's' | $rest == 't' | $rest == 'u' | $rest == 'v' | $rest == 'w' | $rest == 'x' | $rest == 'y' | $rest == 'z'){
$numbers = substr($filez[$key], 0,-5);	
$changes = rename($filez[$key], "ratingTo/".$numbers.".xlsx");
}
}
  • Вопрос задан
  • 124 просмотра
Решения вопроса 1
bubandos
@bubandos
bash'у, javascript'ую, php'лю, css'аю, html'каю
Явно проблема с кодировкой.
В какой кодировке у вас php-файл? Точно в utf-8?
И еще... зачем такие спагетти?
Все делается при помощи preg_replace и регулярного выражения.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Для работы с многобайтными кодировками, например UTF-8, используйте функции библиотеки mbstring
Ну и в целом, всю вашу кашу из сравнений можно перевести в одну строчку
$newName = preg_replace('/(.*?)([а-я])?(\.xlsx)/u', "$1$2$2$3", $oldName);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы