我正在保存一个文件,move_uploaded_file($file['tmp_name'], $save_path . $FileName);
但是当我选择的文件名是阿拉伯文时,该文件以奇怪的字符保存,例如:ÒíäÈ.pdf
。
所以当我稍后尝试打开上传的文件时,它说找不到文件。(真正的)我该怎么办?
我正在保存一个文件,move_uploaded_file($file['tmp_name'], $save_path . $FileName);
但是当我选择的文件名是阿拉伯文时,该文件以奇怪的字符保存,例如:ÒíäÈ.pdf
。
所以当我稍后尝试打开上传的文件时,它说找不到文件。(真正的)我该怎么办?
您可以对要转换为拉丁相似字符的任何字符串使用音译。我非常自定义的音译代码如下所示:
// 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));
}
该函数只是扫描一个字符串并以自定义方式将特定字符集的每个字符转换为拉丁文。然后您可以safely
将文件另存为拉丁文。
使用时间戳重命名图像名称会更好
$imgname = time().'.'.'jpg';
$imgtmpname=$_FILES['file']['tmp_name'];
$fullpath= $path.$imgname;
$filename = $imgname;
move_uploaded_file($imgtmpname,$fullpath);
并将其存储$imgname
在数据库中,以便我们可以按此名称获取图像。它还可以避免图像之间的名称冲突,因为时间戳会不断变化。