上传后如何从文件名中删除特殊字符

时间:2019-03-20 06:42:15

标签: php laravel-5 preg-replace

我在上传后使用Laravel上传了一个zip文件夹,我正在使用 zip存档 提取了这个zip文件夹,但一切正常,但是我的文件名存在问题文件夹,提取的文件夹可能包含许多文件,这些文件名带有特殊字符,例如“æÆØ”,我想从文件名中删除它们。

我使用过preg_replace,但是无法重命名文件。

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

我只想从文件名中删除这些字符。预先感谢。

2 个答案:

答案 0 :(得分:0)

您可以使用存储将文件保存到您喜欢的磁盘(S3,本地,...) 使用Storage::put('file.jpg', $uploaded_file);,您可以简单地使用新文件名存储它。

更新: 如this答案所示,您可以执行以下操作:

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');

答案 1 :(得分:0)

您可以使用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);
}