从字符串中删除空格和特殊字符

12
我正在使用此代码保存上传的文件,但问题在于它允许文件名包含特殊字符和空格。例如,它允许 "

" 这样的名称。
hi how are you

但我不想在这里允许任何空格、特殊字符等。这是我的代码。我尝试使用preg_replace在URI中,但之后我尝试上传文件,但没有上传成功。

function save_file($file) {
    $allowed_ext = array('jpg','png','gif','jpeg');
    $ext = $file['name'];
    $ext = strtolower($ext);

    if (in_array($ext, $allowed_ext)) {
        die('Sorry, the file type is incorrect:'.$file['name']);
    }

    $fname = date("H_i",time()).'_'.get_rand(5);
    $dir = date("Ym",time());
    $folder = 'uploads/userfiles/'.$dir;
    $uri = $folder.'/'.$fname.'.'.$ext;

    if (!is_dir($folder))
        mkdir($folder, 0777);

    if (copy($file['tmp_name'],$uri))
        return $uri;
    else {
        return false;
    }
}

可能是如何在PHP中去除字符串中的所有空格?的重复问题。 - Michael Berkowski
尝试清晰地缩进你的代码,避免使用没有括号的if语句。让它对我们和你都更容易,你会得到更高质量的代码。 - Ricardo Souza
1
参见此处,并扩展表达式以允许大写字母。 / [^a-z] / i - Michael Berkowski
1个回答

37

您可以使用以下正则表达式从字符串中去除非字母字符

$input = preg_replace("/[^a-zA-Z]+/", "", $input);

请问您能告诉我在我的代码中哪里出了问题吗?我已经尝试过了,但是没有成功。请指出我的代码中的问题所在。 - raju
4
@raju 这句话本身就很清楚表达了,你需要努力。 - John
我尝试了这个,但是没有上传成功。$uri = $folder.'/'.$fname.'.'.$ext; $uri = preg_replace("/[^a-zA-Z]+/", "", $uri); 由于$uri有几个依赖项,所以下一行中我没有改变名称,因为php将从上到下执行。 - raju
@raju 看起来你比上面提出的这个问题更有疑问。例如,为什么输入文件名被用作文件扩展名,以及为什么 $allowed_ext 中的扩展名不被允许?你是否曾经运行过你在问题中发布的那段代码? - feeela
1
这将同时删除数字。数字不是空格或特殊字符。 - rineez
4
为允许数字,您可以使用以下代码进行更新:$input = preg_replace("/[^a-zA-Z0-9]+/", "", $input);请注意,这将从输入中删除任何非字母数字字符。 - Vivek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接