php上传文件中文文件名乱码的解决方法


Posted in PHP onNovember 01, 2013

可能会有不少朋友碰到一些问题就是上传文件时如果是英文倒好原文名不会有问题,如果是中文可能就会出现乱码了,今天我来给大家总结一下导致乱码php上传文件中文文件名乱码的原因与解决办法吧。

这几天在windows下安装了XAMPP,准备初步学习一下php的相关内容。这几天接触到了php上传文件,但是出现了一个郁闷问题,我准备上传一个excel文件,但是如果文件名是中文名就会报错。

一来二去很是郁闷,后来仔细想了想应该是文件编码的问题,我写的php文件使用的是UTF-8编码,如果没有猜错APACHE处理用的应该是GBK(当然现在我无法确定,希望高手给与指教)。想明白了这个问题,就去查找相关的教程了,索性找到了iconv这个函数。

函数原型:string iconv ( string in_charset, string out_charset, string str )

使用例子:$content = iconv("GBK", "UTF-8", $content);

这个例子的作用就是将$content从GBK转换成UTF-8编码。

乱码问题关键代码:

$name=iconv("UTF-8","gb2312", $name);
move_uploaded_file($tmpname, $this->final_file_path); 
$name=iconv("gb2312","UTF-8", $name);

除了这样来解决上传文件中文乱码问题,我们还可以把上传文件重新命名即可。

$sFileName = "sda.php";
$sOriginalFileName = $sFileName;
$sExtension = s str($sFileName, (strrpos($sFileName, '.') + 1));//找到扩展名
$sExtension = strtolower($sExtension);
$sFileName = date("YmdHis").rand(100, 200).".".$sExtension; //这样就是我们的新文件名了,全数字的不会有乱码了哦。

以下是一些补充:

php上传中文文件名乱码解决方案

 $filepath="upload/";
 $name=$filepath.$_FILES["upfile"]["name"];
 while(file_exists($name)){
   $temp=explode(".",$name);//分割字符串
    $name=$temp[0]."0".".".$temp[1];//主文件名后面加0
 }
//iconv()函数是关键
  if(move_uploaded_file($_FILES["upfile"]["tmp_name"],iconv("UTF-8","gb2312",$name))){//处理...}

我的PHP编码是UTF-8,其中原因可能是因为操作系统是GBK的原因!

注意:我的服务器是windows xp、apache,估计xp字符集是gbk。因为我的php代码保存为utf-8格式的,在给文件名命名时会出现乱码的情况,所以可以用iconv()函数将原本的utf-8格式的文件名转换为gbk格式的。

php utf8编码 上传中文文件名出现乱码的解决方法

想必很多朋友在进行utf8编码的php开发上传功能的时候,都会遇到这样的一个问题,就是上传中文文件名的文件时,文件名会变成乱码,我们可以用iconv函数对文件名进行重新编码就解决问题了。

<?php
header("Content-Type:text/html;charset=utf-8");
$submit = $_POST['submit'];
if(isset($submit) && trim($submit) != ''){
$file = $_FILES['file'];
if(isset($file['tmp_name'])){
     $name = iconv('utf-8','gb2312',$file['name']); //利用Iconv函数对文件名进行重新编码
     if(move_uploaded_file($file['tmp_name'],$name)){
    echo '文件上传成功!';
    echo '图片信息:';
    print_r($file);
   }
}
}
?>
PHP 相关文章推荐
PHP与SQL注入攻击[二]
Apr 17 PHP
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
Sep 30 PHP
php下intval()和(int)转换使用与区别
Jul 18 PHP
php 判断数组是几维数组
Mar 20 PHP
个人写的PHP验证码生成类分享
Aug 21 PHP
PHP自动重命名文件实现方法
Nov 04 PHP
php将textarea数据提交到mysql出现很多空格的解决方法
Dec 19 PHP
php递归删除目录与文件的方法
Jan 30 PHP
PHP创建/删除/复制文件夹、文件
May 03 PHP
php版微信公众平台入门教程之开发者认证的方法
Sep 26 PHP
PHP随机获取未被微信屏蔽的域名(微信域名检测)
Mar 19 PHP
详解PHP处理字符串类似indexof的方法函数
Jun 11 PHP
PHP防止跨域提交表单
Nov 01 #PHP
PHP查询网站的PR值
Oct 30 #PHP
PHP禁止个别IP访问网站
Oct 30 #PHP
php cURL和Rolling cURL并发方式比较
Oct 30 #PHP
使用PHP Socket写的POP3类
Oct 30 #PHP
腾讯QQ微博API接口获取微博内容
Oct 30 #PHP
FireFox浏览器使用Javascript上传大文件
Oct 30 #PHP
You might like
php设计模式之简单工厂模式详解
2014/09/04 PHP
php实现转换ubb代码的方法
2015/06/18 PHP
大家都应该掌握的PHP关联数组使用技巧
2015/12/25 PHP
thinkPHP5框架导出Excel文件简单操作示例
2018/08/03 PHP
Laravel实现ApiToken认证请求
2019/10/14 PHP
js右键菜单效果代码
2007/07/21 Javascript
javascript实现的动态添加表单元素input,button等(appendChild)
2007/11/24 Javascript
判断某个字符在一个字符串中是否存在的js代码
2014/02/28 Javascript
Node.js中使用mongoskin操作mongoDB实例
2014/09/28 Javascript
jQuery给多个不同元素添加class样式的方法
2015/03/26 Javascript
JS实现放大、缩小及拖拽图片的方法【可兼容IE、火狐】
2016/08/23 Javascript
深入理解requestAnimationFrame的动画循环
2016/09/20 Javascript
AngularJS中的按需加载ocLazyLoad示例
2017/01/11 Javascript
深入浅析javascript继承体系
2017/10/23 Javascript
JS实现的杨辉三角【帕斯卡三角形】算法示例
2019/02/26 Javascript
微信小程序位置授权处理方法
2019/06/13 Javascript
layui的select联动实现代码
2019/09/28 Javascript
原生JS实现萤火虫效果
2020/03/07 Javascript
python基础教程之Hello World!
2014/08/29 Python
python爬虫_自动获取seebug的poc实例
2017/08/05 Python
Python之Scrapy爬虫框架安装及简单使用详解
2017/12/22 Python
python kmeans聚类简单介绍和实现代码
2018/02/23 Python
python迭代dict的key和value的方法
2018/07/06 Python
flask 实现token机制的示例代码
2019/11/07 Python
python使用beautifulsoup4爬取酷狗音乐代码实例
2019/12/04 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
2020/06/08 Python
pandas数据处理之绘图的实现
2020/06/15 Python
HTML页面中添加Canvas标签示例
2015/01/01 HTML / CSS
英国户外装备商店:Ultimate Outdoors
2019/05/07 全球购物
计算机专业毕业生求职信分享
2013/12/24 职场文书
学生鉴定评语大全
2014/05/05 职场文书
服装区域经理岗位职责
2015/04/10 职场文书
小学生禁毒教育心得体会
2016/01/15 职场文书
Spring中bean的生命周期之getSingleton方法
2021/06/30 Java/Android
CentOS7安装GlusterFS集群以及相关配置
2022/04/12 Servers
解决springboot druid数据库连接失败后一直重连的方法
2022/04/19 Java/Android