php上传中文文件名随机码问题处理方案

php上传中文文件名随机码问题处理方案
php上传文件是最基本的技术点,但有很多问题有待深入解决。这不,在上传中文文件,文件名已经成为乱码。

下面是问题代码,非常简单:

1。问题代码

HTML的一部分:

复制代码代码如下所示:
<形式行动=upload_file .phpmethod=后

enctype =多部分/表单数据>

文件名:

PHP的一部分:
复制代码代码如下所示:

< PHP

如果($ _files { 文件

{

返回代码:。_files美元{ 文件

}其他

{

回声上传:文件 _files美元{

回声型:_files美元{文件

回声($ _files {大小:。文件

临时文件。_files美元{ 文件

如果(file_exists(上传 / $ _files {。文件

{

_files { echo $ 文件

}

其他的

{

move_uploaded_file($ _files { 文件

上载。_files美元{ 文件

}

}
上传一个名为测试数据的文件,呵呵,文件是通过了,但是文件名是随机代码。

2。初步测试

在线搜索解决方案,以及

复制代码代码如下所示:

move_uploaded_file($ _files { 文件
改变

复制代码代码如下所示:

move_uploaded_file($ _files { 文件
发现iconv函数的返回值为false。

检查函数手册,发现二参数有特殊的用法,在编码简单的翻译,我可以追加 / / / /直译或忽略,前者不会翻译成最接近的人物性格,后者是字符不能直接转化忽略。
想去 uff1a

复制代码代码如下所示:

var_dump(iconv(UTF-8

var_dump(iconv(UTF-8
结果uff1a

Bool(假)的字符串(4).txt

也就是说,中国人是不能转化的,甚至连文字的连接都不是,似乎网上介绍的方法不是万能的。

三.联机导入方法失败,再试一次

想,也许我的系统将把创建一个中文文件的时候,所以我重写了代码:

复制代码代码如下所示:

move_uploaded_file($ _files { 文件
结果是成功的,没有随机代码,也就是说,它不是一个系统问题。

想想,我的PHP文件本身是UTF8编码,所以

复制代码代码如下所示:

move_uploaded_file($ _files { 文件
这句话是一定要使用UTF8编码。上传之前绝对不是utf8编码的文件名。以下说法绝对是错误的,因为源字符串本身不是UTF8编码。

复制代码代码如下所示:

iconv(UTF-8
使用函数检查源字符串的编码:

复制代码代码如下所示:

E = mb_detect_encoding美元($文本、阵列('utf-8 ',' GBK,'gb2312);

回声E;
其结果是cp936,即字符串编码的源是GBK。

想去

复制代码代码如下所示:

move_uploaded_file($ _files { 文件
问题解决,不再有随机代码

4。另一个解决方案

事实上,在HTML文件的头标记中间有一个解决方案。

复制代码代码如下所示:
为了保持代码的统一,它不需要重新编码。

5。以下是结论

iconv函数的使用可以解决上传中文文件名乱码的问题。事实上,iconv可以解决所有问题的编码不一致造成的乱码。

使用iconv函数来检查源字符串的第一个代码,除非你已经确定的源字符串的编码。

要确保所有的编码,不使用iconv函数。

至于Tucao,请不要使用中文文件名作为保存在服务器上的文件名。请将文件名转换为自己的文件名(即使英文文件名也被翻译)。

tag:文件名上传中文方案电脑软件

相关内容