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 网络开发详解之远程文件包含漏洞
Apr 25 PHP
PHP无刷新上传文件实现代码
Sep 19 PHP
Yii实现多数据库主从读写分离的方法
Dec 29 PHP
codeigniter中实现一次性加载多个view的方法
Mar 20 PHP
PHP设计模式之装饰者模式代码实例
May 11 PHP
php递归实现无限分类的方法
Jul 28 PHP
Yii2框架制作RESTful风格的API快速入门教程
Nov 08 PHP
php curl常用的5个经典例子
Jan 20 PHP
Laravel框架实现的记录SQL日志功能示例
Jun 19 PHP
php进程daemon化的正确实现方法
Sep 06 PHP
laravel orm 关联条件查询代码
Oct 21 PHP
PHP 命名空间和自动加载原理与用法实例分析
Apr 29 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学习之流程控制实现代码
2011/06/09 PHP
ThinkPHP调试模式与日志记录概述
2014/08/22 PHP
smarty中post用法实例
2014/11/28 PHP
2款PHP无限级分类实例代码
2015/11/11 PHP
thinkphp3.x中session方法的用法分析
2016/05/20 PHP
JS中字符问题(二进制/十进制/十六进制及ASCII码之间的转换)
2008/11/03 Javascript
JavaScript 未结束的字符串常量常见解决方法
2010/01/24 Javascript
jQuery UI Autocomplete 1.8.16 中文输入修正代码
2012/04/16 Javascript
jQuery自动切换/点击切换选项卡效果的小例子
2013/08/12 Javascript
js setTimeout 常见问题小结
2013/08/13 Javascript
javascript类型转换使用方法
2014/02/08 Javascript
js使用for循环与innerHTML获取选中tr下td值
2014/09/26 Javascript
解决JS无法调用Controller问题的方法
2015/12/31 Javascript
简单实现node.js图片上传
2016/12/18 Javascript
关于vue.js v-bind 的一些理解和思考
2017/06/06 Javascript
jquery animate动画持续运动的实例
2017/11/29 jQuery
JS实现点击按钮可实现编辑功能
2018/07/03 Javascript
Vue父子组件双向绑定传值的实现方法
2018/07/31 Javascript
VUE注册全局组件和局部组件过程解析
2019/10/10 Javascript
使用jQuery实现购物车
2020/10/29 jQuery
[05:49]2014DOTA2TI4正赛第二日综述 昔日冠军纷纷落马 VG LGD占尽先机
2014/07/20 DOTA
python使用递归解决全排列数字示例
2014/02/11 Python
Python生成不重复随机值的方法
2015/05/11 Python
用xpath获取指定标签下的所有text的实例
2019/01/02 Python
Django中自定义模型管理器(Manager)及方法
2019/09/23 Python
python实现五子棋游戏(pygame版)
2020/01/19 Python
德国最新街头服饰网上商店:BODYCHECK
2019/09/15 全球购物
应届生妇产科护士求职信
2013/10/27 职场文书
励志演讲稿范文
2014/04/29 职场文书
项目技术负责人岗位职责
2015/04/13 职场文书
2015年医院后勤工作总结
2015/05/20 职场文书
建党伟业观后感
2015/06/01 职场文书
2019年公司卫生管理制度样本
2019/08/21 职场文书
导游词之江南周庄
2019/12/06 职场文书
nginx 防盗链防爬虫配置详解
2021/03/31 Servers
SpringBoot2 参数管理实践之入参出参与校验的方式
2021/06/16 Java/Android