Я загружаю zip-папку с помощью Laravel после загрузки. Я извлекаю эту zip-папку с помощью zip-архив, все работает отлично, но у меня проблема с именами файлов в этой папке. Извлеченная папка может содержать много файлов, эти имена файлов имеют специальные символы, такие как «æ Æ Ø", который я хочу удалить из имен файлов.
Я использовал preg_replace, но не смог переименовать файл.
preg_replace('/[ÆØæøÅå]/', '',path/K01_H3_N01 - Længdesnit A-A.pdf);
Я хочу только удалить "æ Æ Ø" эти символы из имени файла. Заранее спасибо.
бро, вся проблема в том, что после загрузки я извлекаю zip-папку, и файлы там






Вы можете использовать Хранилище для сохранения файлов на диск, который вы предпочитаете (S3, локальный, ...)
с Storage::put('file.jpg', $uploaded_file); вы можете просто сохранить его с новым именем файла.
ОБНОВИТЬ: Как видно из ответа это SO, вы можете сделать следующее:
function clean($string) {
$string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens.
return preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars.
}
а затем используйте его следующим образом:
echo clean('a|"bc!@£de^&$f g');
нам также нужно оригинальное имя, поэтому мне нужно удалить специальные символы
Вы можете использовать функцию glob, чтобы получить путь к списку для всего пути, который был извлечен, и зациклить этот список и переименовать каждый файл, заменив все специальные символы
$filesPaths = glob(dirname(__FILE__) . '/[ÆØæøÅå]/');
// This will return an array with old all list of files which pathname matches the given patern
после этого вы можете зацикливать и переименовывать файлы
foreach($filesPaths as $path){
// Get the last part of the path which is the name of the file
$old_name = basename($path);
// replace old special char by empty string
$new_path= preg_replace('/[ÆØæøÅå]/', '', $path);
// Generate a path by replacing the old file name in the path
rename($path, str_replace($old_name, basename($newPath), $new_path);
}
Вы уловили возвращаемое значение и переименовали файл с помощью Storage::move(...)?