You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 02:03:19