Как удалить специальные символы из имени файла после загрузки - PullRequest
0 голосов
/ 20 марта 2019

Я загружаю zip-папку с помощью Laravel после загрузки. Я извлекаю эту zip-папку, используя zip-архив все работает отлично, но у меня проблема с именами файлов в этой папке, Извлеченная папка может содержать много файлов, в именах этих файлов есть специальные символы, такие как «æ Æ Ø», которые я хочу удалить из имен файлов.

Я использовал preg_replace, но не смог переименовать файл.

preg_replace('/[ÆØæøÅå]/', '',path/K01_H3_N01 - Længdesnit A-A.pdf);

Я хочу удалить только эти символы из имени файла. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 20 марта 2019

Вы можете использовать функцию 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);
}
0 голосов
/ 20 марта 2019

Вы можете использовать хранилище для сохранения файлов на диске, который вы предпочитаете (S3, локальный, ...), с помощью Storage::put('file.jpg', $uploaded_file);, вы можете просто сохранить его с новым именем файла.

ОБНОВЛЕНИЕ: Как видно из this 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');
...