我使用move_uploaded_file($file['tmp_name'], $save_path . $FileName);
保存文件,但是当我选择的文件名是阿拉伯文件时,文件保存为如下所示的奇怪字符:ÒíäÈ.pdf
。如何使用move_uploaded_file设置编码?
所以当我尝试打开上传的文件后,它说没有找到文件。(真正的)我该怎么办?
我使用move_uploaded_file($file['tmp_name'], $save_path . $FileName);
保存文件,但是当我选择的文件名是阿拉伯文件时,文件保存为如下所示的奇怪字符:ÒíäÈ.pdf
。如何使用move_uploaded_file设置编码?
所以当我尝试打开上传的文件后,它说没有找到文件。(真正的)我该怎么办?
这将是更好的使用时间戳
$imgname = time().'.'.'jpg';
$imgtmpname=$_FILES['file']['tmp_name'];
$fullpath= $path.$imgname;
$filename = $imgname;
move_uploaded_file($imgtmpname,$fullpath);
重新命名的图像名称,并存储在数据库中的$imgname
所以我们可以获取由该name..It的形象也将避免的名称冲突图像随时间戳不断变化。
你可以使用音译你想要的任何字符串转换拉丁相似的字符。我非常定制音译代码看起来像这样:
// 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));
}
功能只是扫描一个字符串和特定字符的每个字符集 转换成拉丁在一个自定义的方式。然后你可以将文件保存为拉丁文。
好的谢谢,所以没有其他解决方案比重命名文件? – user1395625
这是我知道的最好的方法... –
我宁愿将文件名保存到具有唯一序列号的数据库中,并用该数字命名图像。您的解决方案有潜在的并发问题。 – kba