用PHP上传文件,上的文件和html界面中文乱码问题分享

今天做了个php上传文件的例子,如下是成功后的代码:

<?php
header("content-type:text/html;charset=utf-8");
// error_reporting(0);
function getUploadErr($err){
  switch($err){
    case 1: return '上传文件超过了PHP.ini限定的大小';
    case 2: return '上传文件超过了html表单所限定的大小';
    case 3: return '文件只有部分被上传';
    case 4: return '没有文件被上传';
    default : return FALSE;
  }
}
$path = 'upload/';
$num = 5;
if($_GET['action'] == 'upload'){
  print_r($_FILES['userfile']);
  echo '<br/>';
  $files = $_FILES['userfile'];
  // echo $files['name'][0];
  for($i=0;$i<count($files['name']);$i++){
  $name = iconv("UTF-8","gb2312",$files['name'][$i]);

  if(move_uploaded_file($files['tmp_name'][$i],$path.$name)){
    $name = iconv("gb2312","UTF-8",$name);
    $alert .= $path.$name.'上传成功!' . '<br/>';
  } else {
    $name = iconv("gb2312","UTF-8",$name);
    $alert .= $path.$name.'上传失败!' . getUploadErr($files['error'][$i]) . '<br/>';
  }
  }
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<html lang="en">
<head>
  <meta charset="UTF-8" http-equiv="content-type" content="text/html">
  <title>ajax</title>
</head>
<body>
  <p class="alert"><?php echo $alert; ?></p>
  <h2>单文件上传</h2>
<form action="?action=upload" method="post" enctype="multipart/form-data">
<?php for($i=0;$i<$num;$i++):  ?>
<p><input type="file" name="userfile[]" /></p>
<?php endfor; ?>
<p><button type="submit">上传</button></p>
</form>
</body>
</html>`

完成这个例子时,遇到了如下问题:
1.php文件中嵌入html标签时,html内的文字会出现乱码
解决方案:出现这个原因是php代码和html代码,没有统一文字编码在php头部放入

header("content-type:text/html;charset=utf-8");

然后在html中放入

  <meta charset="UTF-8" http-equiv="content-type" content="text/html">

就可以解决这个问题

2.使用move_uploaded_file()函数上传到upload/目录中的文件,若文件名含有中文,则upload/下的文件名会乱码
解决方案:在move_uploaded_file()之前,先要把文件名的UTF-8编码方式转换成gb2312编码方式,我们电脑的文件使用的是gb2312格式,在move_uploaded_file()前加入这么一句:

 $name = iconv("UTF-8","gb2312",$files['name'][$i]);

再使用move_uploaded_file()上传,上传到计算机目录下的文件名就能正常显示中文了,但是这里要注意一个问题,如果这时候你想在网页上显示上传成功的提示信息(包含文件名),那么就需要你把$name再重新转换回
UTF-8编码格式 $name = iconv("gb2312","UTF-8",$name);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值