【问题标题】:Replacing dots in a filename替换文件名中的点
【发布时间】:2013-07-17 09:38:31
【问题描述】:

如何在不丢失文件扩展名的情况下用下划线替换点?

$str = $_FILES['files']['name']; //file.name.word.jpg
$ext = end(explode('.', $str));
$filename = explode('.', $str);
//output file_name_word.jpg

ps:需要在上传之前..如果用户上传带点的文件,则必须重命名并插入到db中

【问题讨论】:

标签: php replace filenames


【解决方案1】:

使用pathinfo() 提取文件名并使用str_replace() 删除其中的所有点。

$filename = pathinfo('/path/to/your/file');
echo str_replace('.', '_', $filename['filename']);

【讨论】:

  • 这也将替换最后一个点
  • 完成:str_replace('.', '_', $filename['filename']).".".$filename['extension'];
  • @vladkras:不,不会。仅提取文件名。请参阅文档here
【解决方案2】:
$str = "file.name.word.jpg";
$regex = "/(\.)(?=\S+\.)/";
echo preg_replace($regex, "_", $str);

短格式

echo preg_replace("/(\.)(?=\S+\.)/", "_", "file.name.word.jpg");

【讨论】:

  • 在本地函数可用时避免使用正则表达式
  • pathinfo() 和这个复杂的,如果你喜欢的话:$result = str_replace(".", "_", substr($str, 0, strrpos($str, ".")) ).".".end(explode('.',$str));
  • @vladkras:本机函数:pathinfo()str_replace()。查看用法here
  • 你使用: 1. pathinfo() 2. 创建新变量 $filename 3. str_replace 4. 创建新变量 _ 5. concat 文件名和扩展名 我使用 1!字符串和 1!功能
  • preg_replace 不是内置的? really?
猜你喜欢
  • 2018-01-08
  • 1970-01-01
  • 2022-11-09
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
  • 2011-08-25
  • 1970-01-01
  • 2010-12-20
相关资源
最近更新 更多