web-dev-qa-db-ja.com

PHPを使用してファイルをアップロードする前に、特殊文字を置き換えます

アップロードするファイルの名前を変更できるのかと思っていました。私がやろうとしていることは、ユーザーが一部のヨーロッパ言語の特殊文字のようないくつかの特殊文字を含むファイルをアップロードすることです。

私がやろうとしているのは、move_uploaded_fileコマンドを使用する前に、特殊文字を通常の文字に変更/ preg_replaceして、ファイルがアップロードされ、通常の文字のみを持つ新しい名前で保存されるようにすることです。

18
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);
29
472084

この仲間を使おう

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

もっと知りたい 特殊文字をPHPで使用している文字に置き換える方法

3
joni_demon

アップロードされたファイルの元のファイル名は$_FILESから取得できます。また、その中の文字を strtr (これは、このケースに最適)、str_replacepreg_replaceまたはその他の文字列処理関数。

最善の方法は、何をしたいか正確にによって異なります。

0
Jon

あなたはこのようにそれを行うことができ、文字列内の必要な文字を置き換える単純な関数strip_special_chars()を書きます

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

また、次のような特殊文字の関数を使用できます。

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

Allowに注意してください。ファイル拡張子。

そして、元の一時ファイル名を変更し、

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

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