我使用的表单可以让用户将所需的文件上传到系统。 由于所有用户都说波斯语,因此很可能一些文件名也会出现在波斯语中。
我使用一种非常简单的方法在文件上传之前重命名文件。但是,当使用新名称上传文件时,我无法保留编码。新上传文件的名称(名称中包含波斯语字母)由完全随机的不可读字符组成。
这是我的代码:
if($_FILES['replyattachment']['name']!=''){
$msg_attachment=explode(".",$_FILES['replyattachment']['name']);
$org_name=iconv('UTF-8', 'UTF-8', $msg_attachment[0]);
$attachment_ext=$msg_attachment[1];
$num=rand(1000,1999);
$num+=rand(2000,3000);
$attachment_name=time()+$num;
$attached_file_name=$org_name.'_'.$attachment_name.'.'.$attachment_ext;
move_uploaded_file($_FILES['replyattachment']['tmp_name'], ATTACHMENTS.$attached_file_name);
}
在我遇到这个问题之前,我从未使用过,甚至没有听说过iconv功能。所以我认为我应该使用" UTF-8"对于in_charset和out_charset,因为原始名称可能包含UTF-8字符,并且我希望新生成的名称采用UTF-8编码。
我在某处读到了编写代码的文件的编码也很重要。在这种情况下,文件本身(即messages.php)采用UTF-8编码。
我对iconv功能做错了什么?
提前致谢,
编辑:
我搜索了一下,找到了一些东西。正如用户在另一篇文章中所建议的那样,我尝试使用Ar / Fa字符的代码页,即Windows-1256。
但我们还建议在我们将名称保存到数据库或调用它时使用rawurlencode
和rawurldecode
。所以我的代码发生了什么:
$org_name=iconv('UTF-8', 'Windows-1256', $msg_attachment[0]);
$attached_file_name=rawurlencode($org_name.'_'.$attachment_name.'.'.$attachment_ext);
稍后当我想调用该文件的链接时,我再次使用rawurldecode
函数。
但问题是这整个过程,改变了文件的全名,即使它完美无缺。我坚持保留原来的名字。
据我所知,只有一种用PHP上传文件的方法,当然是move_uploaded_file。 像Wordpress这样基于PHP的CMS如何完成这项工作呢?
最终编辑:
经过几天的各种PHP功能和通过众多论坛和网站的探讨,我终于找到了解决方案!
WFIO是解决方案。一个PHP扩展,您可以通过this link下载并在您的php.ini文件中启用。访问这两页以了解有关其用法的更多信息: