2012-06-05 21 views
0

我使用move_uploaded_file($file['tmp_name'], $save_path . $FileName);保存文件,但是当我选择的文件名是阿拉伯文件时,文件保存为如下所示的奇怪字符:ÒíäÈ.pdf如何使用move_uploaded_file设置编码?

所以当我尝试打开上传的文件后,它说没有找到文件。(真正的)我该怎么办?

回答

-1

这将是更好的使用时间戳

$imgname = time().'.'.'jpg'; 
$imgtmpname=$_FILES['file']['tmp_name']; 
$fullpath= $path.$imgname; 
$filename = $imgname; 
move_uploaded_file($imgtmpname,$fullpath); 

重新命名的图像名称,并存储在数据库中的$imgname所以我们可以获取由该name..It的形象也将避免的名称冲突图像随时间戳不断变化。

+0

好的谢谢,所以没有其他解决方案比重命名文件? – user1395625

+0

这是我知道的最好的方法... –

+0

我宁愿将文件名保存到具有唯一序列号的数据库中,并用该数字命名图像。您的解决方案有潜在的并发问题。 – kba

0

你可以使用音译你想要的任何字符串转换拉丁相似的字符。我非常定制音译代码看起来像这样:

// convert a utf8-encoded string into latin representative 
function transliterate_string($params=array()) 
{ 
    // PARAMS: "string", "language" 

    // 0) fill-in "native" chars by language and their "latin" representative 
    $SP_trans = array(
     "ae"=>array("native"=>"ة,بْ,...","latin"=>"a,b,..."), 
     ...other langs if you want 
    ); 

    // 1) break "native" & "latin" strings 
    $nc = explode(",",$SP_trans[ $params["language"] ]["native"]); 
    $lc = explode(",",$SP_trans[ $params["language"] ]["latin"]); 
    // 2) convert to lower first 
    $string = mb_strtolower($params["string"],"utf-8"); 
    // 3) loop each character 
    mb_internal_encoding("UTF-8"); 
    for($x=0,$sz=mb_strlen($string);$x<$sz;$x++) { 
    $char = mb_substr($string,$x,1); 
    $index = array_search($char,$nc); 
    $out[$x] = ($index===FALSE ? $char : $lc[$index]); 
    } 
    return trim(implode("",$out)); 
} 

功能只是扫描一个字符串和特定字符的每个字符集 转换成拉丁在一个自定义的方式。然后你可以将文件保存为拉丁文。