web-dev-qa-db-fra.com

Remplacez les caractères spéciaux avant le téléchargement du fichier à l'aide de PHP

Je me demandais s'il était possible de changer le nom du fichier à télécharger. Ce que je veux dire, c’est que l’utilisateur télécharge un fichier qui peut contenir des caractères spéciaux, tels que des caractères spéciaux dans certaines langues européennes. 

Ce que je prévois de faire, c'est qu'avant d'utiliser la commande move_uploaded_file, il est possible de changer/preg_replace les caractères spéciaux avec des caractères normaux, de sorte que le fichier soit chargé et stocké avec le nouveau nom comportant uniquement des caractères normaux.

17
125369
// 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);
28
472084

essayez d'utiliser ce frère

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

pour en savoir plus, visitez comment remplacer des caractères spéciaux par ceux sur lesquels ils sont basés en PHP?

3
joni_demon

Vous pouvez obtenir le nom de fichier d'origine d'un fichier téléchargé à partir de $_FILES, et vous pouvez créer votre version "spéciale" en remplaçant les caractères qu'il contient par strtr (qui semble être la meilleure correspondance dans ce cas), str_replace, preg_replace ou tout autre autre fonction de traitement de chaîne.

La meilleure approche dépend de ce que exactement vous voulez faire.

0
Jon

Vous pouvez le faire comme ceci, écrivez une simple fonction strip_special_chars() pour remplacer les caractères que vous voulez dans une chaîne

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

Aussi, vous pouvez utiliser une fonction pour les caractères spéciaux comme ceci:

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;
}

Faites attention à permettre. pour extension de fichier.

Et puis changez votre nom de fichier temporaire d'origine,

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

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