PHP移除文件名圆点后内容问题:trim/replace/substr尝试无效
移除PDF文件名后缀的可行方案
你当前使用的substr($items['pdf_name'], 0, -4)之所以没生效,大概率是因为这种写法仅固定截取倒数4个字符前的内容,一旦文件名包含多个小数点(比如file.v1.pdf),或者文件名末尾存在空格、不可见字符,就会出现截取错误。
下面是几种更可靠的解决办法:
- 推荐使用pathinfo函数(PHP原生的路径/文件名处理工具,适配所有标准文件名格式):
$file = pathinfo($items['pdf_name'], PATHINFO_FILENAME);
这个函数会自动提取不带后缀的文件名,不管后缀是什么,都能准确处理。
- 定位最后一个小数点的位置截取:
如果只想针对.pdf后缀处理,可以先判断文件是否以.pdf结尾,再截取最后一个小数点前的内容:
$filename = $items['pdf_name']; // 统一转小写,避免大小写后缀的问题 if (strtolower(substr($filename, -4)) === '.pdf') { $file = substr($filename, 0, strrpos($filename, '.')); } else { // 非PDF文件的处理逻辑,比如保留原文件名 $file = $filename; }
strrpos会找到字符串中最后一个.的位置,即使文件名里有多个点,也只会去掉最后一个点后的内容。
- 正则替换精准匹配PDF后缀:
如果需要忽略大小写匹配.pdf后缀(比如.PDF、.Pdf),可以用正则替换:
$file = preg_replace('/\.pdf$/i', '', $items['pdf_name']);
这个正则会匹配字符串末尾的.pdf(不区分大小写)并替换为空,不会影响文件名中间的小数点。
另外,如果你的substr写法本该生效却没起作用,可以检查$items['pdf_name']的值是否带有空格或不可见字符,先做一次trim处理再截取:
$filename = trim($items['pdf_name']); $file = substr($filename, 0, -4);
但这种方法仅适用于确定文件名严格以.pdf结尾且无多余小数点的场景,通用性不如前面几种方案。
内容的提问来源于stack exchange,提问作者Phung Thuan
相关产品推荐
相关产品推荐

