使用iconv()来保持编码

时间:2018-01-31 16:04:37

标签: php encoding utf-8 rename iconv

我使用的表单可以让用户将所需的文件上传到系统。 由于所有用户都说波斯语,因此很可能一些文件名也会出现在波斯语中。

我使用一种非常简单的方法在文件上传之前重命名文件。但是,当使用新名称上传文件时,我无法保留编码。新上传文件的名称(名称中包含波斯语字母)由完全随机的不可读字符组成。

这是我的代码:

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。

但我们还建议在我们将名称保存到数据库或调用它时使用rawurlencoderawurldecode。所以我的代码发生了什么:

$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文件中启用。访问这两页以了解有关其用法的更多信息:

0 个答案:

没有答案