WAMP环境UTF8编码上传中文名文件文件名乱码

测试环境:

windows7 php5.5.12 apache2.4.9

form表单

<form action="http://127.0.0.1/" method="post"  enctype="multipart/form-data">
    <input type="file" name="MAX_FILE_SIZE" value="1000000" />
    <input type="submit" name="submit">
</form>

PHP处理代码

if($_SERVER["REQUEST_METHOD"] == "POST"){
	var_dump($_FILES);
	$info = pathinfo($_FILES["MAX_FILE_SIZE"][‘name‘]);
	move_uploaded_file($_FILES["MAX_FILE_SIZE"][‘tmp_name‘],‘fx\\‘.$_FILES["MAX_FILE_SIZE"][‘name‘]);
	exit();
}

测试一:

1、form表单文件 和 PHP文件均为utf8编码

2、选择中文名称文件提交上传后,输出$_FILES数组,文件名显示正常

3、服务器磁盘文件名乱码,文件内容正常

测试二:

1、更改form表单页面编码为GBK PHP处理页面代码为UTF8

2、选择中文名称文件上传,输出$_FILES数组,文件名乱码

3、服务器磁盘文件名正常,文件内容正常

结论:

因目前只有window服务器环境,所以暂且在window环境下总结为服务器在处理文件上传时,无论页面是何种编码,可能因为是windows服务器的原因,读取上传的文件名称时始终采用的是gbk编码,所以当提交页面不是采用gbk编码方式提交时,就会乱码。解决方法为:

1、保障提交页面编码和处理页面编码一致,才不会导致处理页面获取到的信息乱码

2、提交页面编码为gbk则不会导致上传到服务器的中文名文件文件名乱码

3、若提交页面不是GBK编码,处理页面在写入文件时,应将文件名转为gbk编码 iconv("提交页面编码","gbk",文件名)

4、因为目前测试环境只有windows服务器,所以将乱码的原因归结为服务器读取文件名的编码格式原因导致非gbk提交页面文件名乱码,若你有其他测试环境,麻烦帮忙测试 谢谢。

时间: 2024-10-06 21:47:45

WAMP环境UTF8编码上传中文名文件文件名乱码的相关文章

[转]JSP或servlet中(以及上传下载文件)中文乱码或不显示的解决方案

时间 2014-04-14 14:33:44  CSDN博客 原文  http://blog.csdn.net/xby1993/article/details/23677375 主题 ServletJSP JSP或servlet中中文乱码的解决方案: 1.以POST请求方式: 在获取请求参数之前设置: request.setCharacterEncoding("utf-8"); 设置输出编码: response.setContentType("text/html;charse

springmvc中Tomcat跨服务器上传中文名文件报错解决方案

今天花了一整天时间解决tomcat跨服务器上传文件失败的问题,经过各种搜索终于解决了,下面是解决具体方法: 一.首先修改Tomcat的只读属性为false. 在tomcat的conf目录下的web.xml文件中找到<servlet>标签,添加初始化参数readonly,代码如下: <servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.se

在LNMP原来的基础上,win7环境下如何上传PHP文件到Linux环境下

首先,下载一个WINSCP客户端 连接主机后,上传文件到自己的保存目录 接着进入数据库添加我们的数据库 mysql -uroot -p  //这个是进入mysql的命令,但是要是你没有加  ln -s /usr/local/mysql/bin/mysql /usr/bin   的话就要输入下面那一行 /usr/local/mysql/bin/mysql -uroot -p create database db1;       //db1是你的数据库名称 退出mysql数据库后输入 mysql -

Cherrypy文件上传非ASCII文件名乱码问题解决

Cherrypy 版本: 18.0.1 由于某些特殊原因(可能是与标准兼容的问题),Cherrypy对上传文件的原文件名使用 ISO-8859-1 编码方式解码,导致非 ASCII 的文件名显示为乱码. 解决的方式也很简单,只需要对文件名使用 ISO-8859-1 编码然后在使用 UTF-8 重新解码即可. 以下是一个完整的例子: 1 from os import makedirs 2 from os.path import dirname, join as pathjoin, exists a

c# web文件上传时文件过大404错误的问题

ASP.NET的程序部署在IIS7环境下,上传大文件时出现“404-找不到文件或目录”的错误,如下图: <system.web> <httpRuntime useFullyQualifiedRedirectUrl="true" executionTimeout="120" maxRequestLength="1024000000"/> </system.web> 在程序的web.config中已经设置过上传文件

文件上传三:base64编码上传

介绍三种上传方式: 文件上传一:伪刷新上传 文件上传二:FormData上传 文件上传三:base64编码上传 Flash的方式也玩过,不喜欢不拿来说了. 优点: 1.浏览器可以马上展示图像,不需要先上传到服务端,减少服务端的垃圾图像 2.前端可以压缩.处理后上传到服务端,减少传输过程中的等待时间和服务器压力 缺点: 1.生成编码后保存成图片,倘若不做处理,会比原来的图片容量大,具体原因,搜索关键词:Base64编码为什么会使数据量变大 2.图片越大生成的编码越多,编码越多开发者工具中查看它时卡

PHP-02.文件上传、php保存/转移上传的文件、常见的网络传输协议、请求报文及属性、响应报文及属性

关系数组 array("key"=>"value",...) ; get没有数据大小的限制 post上传大小没有限制 不指定上传方式,默认是get 文件上传 需要在html中 form属性中添加 enctype = "multipart/form-data" <!-- 上传文件必须设置 enctype ='multipart/form-data' --> <form action="text01.php"

微信企业号上传媒体文件之服务器文件上传

微信企业号上传媒体文件之服务器文件上传 企业在使用接口时,对多媒体文件.多媒体消息的获取和调用等操作,是通过media_id来进行的. 通过接口https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE,企业可以上传多媒体文件. 注意,每个多媒体文件(media_id)会在上传到微信服务器3天后自动删除,以节省服务器资源. 通常文件上传是通过html表单进行的,通过HttpURLConn

微信企业号上传媒体文件之本地文件上传

微信企业号上传媒体文件之本地文件上传 企业在使用接口时,对多媒体文件.多媒体消息的获取和调用等操作,是通过media_id来进行的. 通过接口https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE,企业可以上传多媒体文件. 注意,每个多媒体文件(media_id)会在上传到微信服务器3天后自动删除,以节省服务器资源. 通常文件上传是通过html表单进行的,通过HttpURLConne