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 相关文章推荐
基于文本的留言簿
Oct 09 PHP
PHP运行时强制显示出错信息的代码
Apr 20 PHP
关于zend studio 出现乱码问题的总结
Jun 23 PHP
如何阻止网站被恶意反向代理访问(防网站镜像)
Mar 18 PHP
php中smarty模板条件判断用法实例
Jun 11 PHP
PHP递归实现层级树状展开
Apr 01 PHP
php微信公众号开发(3)php实现简单微信文本通讯
Dec 15 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
Feb 04 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
Jun 13 PHP
实例讲解php实现多线程
Jan 27 PHP
解决laravel session失效的问题
Oct 14 PHP
PHP 99乘法表的几种实现代码
Oct 13 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桌面中心(四) 数据显示
2007/03/11 PHP
解析php中die(),exit(),return的区别
2013/06/20 PHP
Drupal读取Excel并导入数据库实例
2014/03/02 PHP
php实现数组按指定KEY排序的方法
2015/03/30 PHP
PHP常用技巧汇总
2016/03/04 PHP
ExtJS中文乱码之GBK格式编码解决方案及代码
2013/01/20 Javascript
caller和callee的区别介绍及演示结果
2013/03/10 Javascript
jquery弹出框的用法示例(一)
2013/08/26 Javascript
原生javaScript做得动态表格(注释写的很清楚)
2013/12/29 Javascript
深入分析原生JavaScript事件
2014/12/29 Javascript
node.js集成百度UE编辑器
2015/02/05 Javascript
jquery仿百度经验滑动切换浏览效果
2015/04/14 Javascript
js显示文本框提示文字的方法
2015/05/07 Javascript
jQuery实现首页图片淡入淡出效果的方法
2015/06/10 Javascript
javascript下拉列表中显示树形菜单的实现方法
2015/11/17 Javascript
三分钟带你玩转jQuery.noConflict()
2016/02/15 Javascript
jQuery插件echarts实现的多柱子柱状图效果示例【附demo源码下载】
2017/03/04 Javascript
es6系列教程_ Map详解以及常用api介绍
2017/09/25 Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
2017/11/27 Javascript
JS实现点击按钮随机生成可拖动的不同颜色块示例
2019/01/30 Javascript
vue监听键盘事件的相关总结
2021/01/29 Vue.js
[00:17]游戏风云独家报道:DD赛后说出数字秘密 吓死你们啊!
2014/07/13 DOTA
python实现文件路径和url相互转换的方法
2015/07/06 Python
python的mysqldb安装步骤详解
2017/08/14 Python
Python numpy.array()生成相同元素数组的示例
2018/11/12 Python
python+adb+monkey实现Rom稳定性测试详解
2020/04/23 Python
幼师自我鉴定范文
2013/10/01 职场文书
2014年中班元旦活动方案
2014/02/14 职场文书
技术经济专业求职信
2014/09/03 职场文书
公司党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
承诺书范本
2015/01/21 职场文书
2015年基建工作总结范文
2015/05/23 职场文书
再见,2019我们不负使命;你好,2020我们砥砺前行
2020/01/03 职场文书
基于Redis实现分布式锁的方法(lua脚本版)
2021/05/12 Redis
redis 存储对象的方法对比分析
2021/08/02 Redis
MySQL常用慢查询分析工具详解
2022/08/14 MySQL