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 09 PHP
Ajax PHP简单入门教程代码
Apr 25 PHP
PHP parse_url 一个好用的函数
Oct 03 PHP
php mysql 判断update之后是否更新了的方法
Jan 10 PHP
PHP中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码
Feb 14 PHP
深入extjs与php参数交互的详解
Jun 25 PHP
PHP的引用详解
Feb 22 PHP
PHP中常见的缓存技术实例分析
Sep 23 PHP
PHP实现上传多文件示例代码
Feb 20 PHP
thinkphp框架page类与bootstrap分页(美化)
Jun 25 PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
Aug 03 PHP
PHP字符串与数组处理函数用法小结
Jan 07 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
各种咖啡的英文名子是什么
2021/03/03 新手入门
让PHP支持页面回退的两种方法
2008/01/10 PHP
php项目打包方法
2008/02/18 PHP
php获取通过http协议post提交过来xml数据及解析xml
2012/12/16 PHP
php正则修正符用法实例详解
2016/12/29 PHP
php实现网页端验证码功能
2017/07/11 PHP
Laravel 实现数据软删除功能
2019/08/21 PHP
图片自动缩小 点击放大
2008/07/07 Javascript
二级域名或跨域共享Cookies的实现方法
2008/08/07 Javascript
不用AJAX和IFRAME,说说真正意义上的ASP+JS无刷新技术
2008/09/25 Javascript
高效的表格行背景隔行变色及选定高亮的JS代码
2010/12/04 Javascript
浅谈js的setInterval事件
2014/12/05 Javascript
浅谈JavaScript Array对象
2014/12/29 Javascript
JQuery中DOM加载与事件执行实例分析
2015/06/13 Javascript
javascript 应用小技巧方法汇总
2015/07/05 Javascript
JS实现转动随机数抽奖特效代码
2020/04/16 Javascript
JS实现适合于后台使用的动画折叠菜单效果
2015/09/21 Javascript
基于Bootstrap实现图片轮播效果
2016/05/22 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
解决Vue中mounted钩子函数获取节点高度出错问题
2018/05/18 Javascript
基于vue实现移动端圆形旋钮插件效果
2018/11/28 Javascript
js中的this的指向问题详解
2019/08/29 Javascript
基于element-ui封装表单金额输入框的方法示例
2021/01/06 Javascript
Python中的rjust()方法使用详解
2015/05/19 Python
selenium+Chrome滑动验证码破解二(某某网站)
2019/12/17 Python
python 生成任意形状的凸包图代码
2020/04/16 Python
什么是Python变量作用域
2020/06/03 Python
在tensorflow下利用plt画论文中loss,acc等曲线图实例
2020/06/15 Python
Expedia法国:全球最大在线旅游公司
2018/09/30 全球购物
美国中西部家用医疗设备商店:Med Mart(轮椅、踏板车、升降机等)
2019/04/26 全球购物
大学生个人推荐信范文
2013/11/25 职场文书
公司成立感言
2014/01/11 职场文书
小学生打架检讨书
2014/01/26 职场文书
企业财务总监岗位职责
2015/04/03 职场文书
预备党员考察表党小组意见
2015/06/01 职场文书
nginx优化的六点方法
2021/03/31 Servers