在使用PHP上载文件之前替换特殊字符

时间:2012-03-23 12:13:17

标签: php special-characters

我想知道是否可以更改要上传的文件的名称。我的意思是我要做的是,用户上传的文件可能包含一些特殊字符,如某些欧洲语言中的特殊字符。

我打算做的是在使用move_uploaded_file命令之前,可以使用普通字符更改/ preg_replace特殊字符,以便使用只有普通字符的新名称上传和存储文件。

5 个答案:

答案 0 :(得分:28)

// Get the original file name from $_FILES
$file_name= $_FILES['file']['name'];

// Remove any characters you don't want
// The below code will remove anything that is not a-z, 0-9 or a dot.
$file_name = preg_replace("/[^a-zA-Z0-9.]/", "", $file_name);

// Get the location of the folder to upload into
$location = 'path/to/dir/';

// Use move_uploaded_file()
move_uploaded_file($_FILES["file"]["tmp_name"], $location.$file_name);

答案 1 :(得分:3)

尝试使用这个兄弟

   $result = iconv("UTF-8", "ASCII//TRANSLIT", $text);

了解更多访问how to replace special characters with the ones they're based on in PHP?

答案 2 :(得分:0)

您可以从$_FILES获取上传文件的原始文件名,并且可以通过用strtr替换其中的字符来创建“特殊”版本(这听起来是此案例的最佳匹配) ),str_replacepreg_replace或任何其他字符串处理函数。

最佳方法取决于您想要做的完全

答案 3 :(得分:0)

你可以这样做,编写一个简单的函数strip_special_chars()来替换你想要的字符串

$tmp_name = $_FILES["file"]["tmp_name"];
$name = strip_special_chars($tmp_name);
move_uploaded_file($name, "path/to/dir/");

答案 4 :(得分:0)

你也可以使用这个特殊字符的函数:

function safename($theValue)
{
    $_trSpec = array(
        'Ç' => 'C', 
        'Ğ' => 'G', 
        'İ' => 'I',
        'Ö' => 'O', 
        'Ş' => 'S', 
        'Ü' => 'U',
        'ç' => 'c', 
        'ğ' => 'g', 
        'ı' => 'i',
        'i' => 'i',
        'ö' => 'o', 
        'ş' => 's', 
        'ü' => 'u',
    );
    $enChars = array_values($_trSpec);
    $trChars = array_keys($_trSpec);
    $theValue = str_replace($trChars, $enChars, $theValue); 
    $theValue=preg_replace("@[^A-Za-z0-9\-_.\/]+@i","-",$theValue);
    $theValue=strtolower($theValue);
    return $theValue;
}

小心允许。用于文件扩展名。

然后更改原始临时文件名

$tempFile = $_FILES['Filedata']['tmp_name'];
$targetFile = safename($targetFile);

$location = 'path/to/dir/';
move_uploaded_file($_FILES["file"]["tmp_name"], $location.$targetFile);