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 传值赋值与引用赋值的区别
Dec 29 PHP
使用php判断服务器是否支持Gzip压缩功能
Sep 24 PHP
php源码分析之DZX1.5随机数函数random用法
Jun 17 PHP
WordPress中编写自定义存储字段的相关PHP函数解析
Dec 25 PHP
php判断str字符串是否是xml格式数据的方法示例
Jul 26 PHP
PHP实现实时生成并下载超大数据量的EXCEL文件详解
Oct 23 PHP
workerman结合laravel开发在线聊天应用的示例代码
Oct 30 PHP
PHP addAttribute()函数讲解
Feb 03 PHP
PHP实现与java 通信的插件使用教程
Aug 11 PHP
PHP实现时间日期友好显示实现代码
Sep 08 PHP
thinkPHP5框架路由常用知识点汇总
Sep 15 PHP
PHP优化之批量操作MySQL实例分析
Apr 23 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 xml文件操作实现代码(二)
2009/03/20 PHP
使用php显示搜索引擎来的关键词
2014/02/13 PHP
php 生成自动创建文件夹并上传文件的示例代码
2014/03/07 PHP
PHP解码unicode编码的中文字符代码分享
2014/08/13 PHP
PHP微信开发之微信录音临时转永久存储
2018/01/26 PHP
JavaScript 原型与继承说明
2010/06/09 Javascript
jQuery为iframe的body添加click事件的实现代码
2011/04/07 Javascript
JS原型对象通俗&quot;唱法&quot;
2012/12/27 Javascript
javascript获取选中的文本的方法代码
2013/10/30 Javascript
JQuery中extend使用介绍
2014/03/13 Javascript
node.js中的fs.lchmodSync方法使用说明
2014/12/16 Javascript
jquery序列化方法实例分析
2015/06/10 Javascript
javascript中对象的定义、使用以及对象和原型链操作小结
2016/12/14 Javascript
JavaScript使用delete删除数组元素用法示例【数组长度不变】
2017/01/17 Javascript
JavaScript基础进阶之数组方法总结(推荐)
2017/09/04 Javascript
vue init webpack 建vue项目报错的解决方法
2018/09/29 Javascript
原生JavaScript创建不可变对象的方法简单示例
2020/05/07 Javascript
vue相同路由跳转强制刷新该路由组件操作
2020/08/05 Javascript
jQuery实现简单QQ聊天框
2020/08/27 jQuery
[03:23]我的刀塔你不可能这么可爱 第一期金萌萌的故事
2014/06/20 DOTA
python 爬取马蜂窝景点翻页文字评论的实现
2020/01/20 Python
Python实现邮件发送的详细设置方法(遇到问题)
2021/01/18 Python
HTML5的文档结构和新增标签完全解析
2017/04/21 HTML / CSS
美国乡村商店:Plow & Hearth
2016/09/12 全球购物
大学生学习生活的自我评价
2013/11/01 职场文书
室内设计专业学生的自我评价分享
2013/11/27 职场文书
网络事业创业计划书范文
2014/01/09 职场文书
《莫高窟》教学反思
2014/02/25 职场文书
环境建设实施方案
2014/03/14 职场文书
文化产业实施方案
2014/06/07 职场文书
领导工作表现评语
2015/01/04 职场文书
建议书范文
2015/02/05 职场文书
格林童话读书笔记
2015/06/30 职场文书
2019学子的答谢词范本!
2019/07/05 职场文书
Django操作cookie的实现
2021/05/26 Python
一篇文章带你复习java知识点
2021/06/28 Java/Android