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

如何过滤上传文件名,仅保留罗马字母(含重音)及合法符号?

文件名过滤解决方案(保留拉丁字母含重音+合法符号)

可以用PHP的preg_replace结合Unicode正则属性来实现,直接匹配并移除所有非允许的字符:

function sanitizeUploadFilename($filename) {
    // 先移除首尾空格
    $filename = trim($filename);
    
    // 正则规则:保留所有拉丁系字母(含重音)、数字,以及._-这类常见合法符号
    // \p{Latin} 匹配Unicode中所有拉丁字母(覆盖波兰语、法语、西班牙语等带重音的罗马字母)
    // u修饰符确保正则能正确处理Unicode字符
    $cleanFilename = preg_replace('/[^\p{Latin}0-9._-]/u', '', $filename);
    
    return $cleanFilename;
}

说明:

  • \p{Latin} 是Unicode字符属性,会匹配所有罗马字母及其重音变体(比如波兰语的ą、ć,法语的é,德语的ü等),完美覆盖你需要保留的带重音罗马字母。
  • 正则中的0-9._-是允许的额外字符,你可以根据需求调整(比如要允许@或&,直接加到集合里即可,变成[^\p{Latin}0-9._-@&])。
  • u修饰符必须加上,否则无法正确识别中文、阿拉伯文这类多字节Unicode字符。

之前用str_replace无法实现是因为它只能针对具体字符做替换,没法批量匹配“非拉丁字母”这类字符集合,正则的字符排除匹配刚好解决这个问题。

内容的提问来源于stack exchange,提问作者mitebu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:35:27