Подтвердить что ты не робот

Заменяйте специальные символы перед загрузкой файла с помощью PHP

Мне было интересно, можно ли изменить имя загружаемого файла. Я имею в виду то, что я пытаюсь сделать, так это то, что пользователь загружает файл, который может иметь некоторые специальные символы, такие как специальные символы на некоторых европейских языках.

Что я планирую сделать, так это то, что перед использованием команды move_uploaded_file можно изменить /preg _replace специальные символы с нормальными символами, чтобы файл был загружен и сохранен с новым именем, которое имеет только обычные символы.

4b9b3361

Ответ 1

// 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);

Ответ 3

Вы можете получить исходное имя файла для загруженного файла с $_FILES, и вы можете создать свою "специальную" версию, заменив в ней символы strtr (это звучит как наилучшее совпадение для этого случая), str_replace, preg_replace или любая другая функция обработки строк.

Лучший подход зависит от того, что именно вы хотите сделать.

Ответ 4

Вы можете сделать это так, напишите простую функцию strip_special_chars(), чтобы заменить символы, которые вы хотите в строке

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

Ответ 5

Также вы можете использовать функцию для специальных символов, например:

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\-_.\/][email protected]","-",$theValue);
    $theValue=strtolower($theValue);
    return $theValue;
}

Будьте осторожны, позвольте. для расширения файла.

И затем измените исходное имя файла temp,

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

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