PHP上传文件,中文文件名导致无法上传

网校上http://www.runoob.com/php/php-file-upload.html的教程可用。

我自己写的代码如下create-[project.php,也就是网校上的upload

<?php
//中文
header("Content-type: text/html; charset=utf-8");
	
//上传文件代码开始
if ($_FILES["file"]["error"] > 0)
{
	echo "请上传附件:: " . $_FILES["file"]["error"] . "<br>";
}
else
{
	echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";//第一个参数是表单的 input name,第二个下标可以是 "name", "type", "size", "tmp_name" 或 "error"。
	echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
	echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
	echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"] . "<br>";
		
	// 判断当期目录下的 jungongziliao目录是否存在该文件
	// 如果没有 jungongziliao 目录,你需要创建它,upload 目录权限为 777
	if (file_exists("fujian/" . $_FILES["file"]["name"]))
		{
			echo $_FILES["file"]["name"] . " 文件已经存在。 ";
		}
	else
		{
			// 如果 images 目录不存在该文件则将文件上传到 fujian 目录下
			move_uploaded_file($_FILES["file"]["tmp_name"], "../fujian/" .iconv("UTF-8", "gbk",$_FILES["file"]["name"]));
			echo "文件存储在: " . "fujian/" . $_FILES["file"]["name"];
			
			//将文件保存路径上传到数据库中
			$uploaddir = "fujian/";//设置文件保存目录 注意包含/ 
			$name = $_FILES["file"]["name"];
			$uploadfile=$uploaddir.$name;	
		}
	    //上传文件代码结束
		
$servername = "127.0.0.1";
$username = "root";
$password = "";
$dbname = "mydb";

//创建连接
$conn = new mysqli($servername, $username, $password,$dbname);//new MySQLi(主机,账号,密码,数据库,端口号);
//检测连接是否成功
if ($conn->connect_error) {
    die("连接数据库失败: " . $conn->connect_error);
} 
echo "连接数据库成功";
echo "<br>";
		//向数据库myDB中的Projects表插入数据
		$sql = "INSERT INTO project (Project_name, Project_id, Qvxian,Type,Start_name,Start_gps,End_name,End_gps,Reasons,Situation,url)
		VALUES ('$_POST[name]', '$_POST[no]', '$_POST[qvxian]','$_POST[kind]','$_POST[start_name]', '$_POST[start_gps]', '$_POST[end_name]','$_POST[end_gps]','$_POST[reasons]','需求提出','$uploadfile')";
		if ($conn->query($sql) === TRUE) 
		{
			echo "新记录插入成功";
		}
		else 
		{
			echo "Error: " . $sql . "<br>" . $conn->error;
		}
}
	


$conn->close();
?>

发现问题,只要文件名包含中文,结果虽然能采集到文件名,但是move_uploaded_file报错,这是因为它无法识别中文。

当遇到中文文件名的时候,对文件名进行强制转码iconv("UTF-8""gbk",$name)UTF8转换成gbk,这样就不会出现乱码了,如下

move_uploaded_file($_FILES["file"]["tmp_name"], "../fujian/" .iconv("UTF-8", "gbk",$_FILES["file"]["name"]));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值