PHP上传出现乱码 请问以下这段上传代码我上传中文时会出现乱码,请问怎么修改啊

<?phpmb_http_input("UTF-8");mb_http_output("UTF-8");if(getGet('access2008_cmd')=='2')... <?php
mb_http_input("UTF-8");
mb_http_output("UTF-8");

if(getGet('access2008_cmd')=='2'){

die('0');
}
if(getGet('access2008_cmd')=='3'){

die('1');
}

$php_path = dirname(__FILE__) . '/';
$php_url = dirname($_SERVER['PHP_SELF']) . '/';

//文件保存目录路径
$save_path = $php_path . './';

$save_url = $php_url . './';

$ext_arr = array('gif', 'jpg', 'jpeg', 'zip', 'rar', 'png', 'bmp');

$max_size = 102400*50000;//(默认500K)

$save_path = realpath($save_path) . '/';

//有上传文件时
if (empty($_FILES) === false) {
//原文件名
$file_name = $_FILES['Filedata']['name'];

//服务器上临时文件名
$tmp_name = $_FILES['Filedata']['tmp_name'];
//文件大小
$file_size = $_FILES['Filedata']['size'];
//检查文件名
if (!$file_name) {
exit("返回错误: 请选择文件。");
}
//检查目录
if (@is_dir($save_path) === false) {
exit("返回错误: 上传目录不存在。($save_path)");
}
//检查目录写权限
if (@is_writable($save_path) === false) {
exit("返回错误: 上传目录没有写权限。($save_url)");
}
//检查是否已上传
if (@is_uploaded_file($tmp_name) === false) {
exit("返回错误: 临时文件可能不是上传文件。($file_name)");
}
//检查文件大小
if ($file_size > $max_size) {
exit("返回错误: 上传文件($file_name)大小超过限制。最大".($max_size/102400)."KB");
}
$temp_arr = explode(".", $file_name);
$file_ext = array_pop($temp_arr);
$file_ext = trim($file_ext);
$file_ext = strtolower($file_ext);
if (in_array($file_ext, $ext_arr) === false) {
exit("返回错误: 上传文件扩展名是不允许的扩展名。");
}

echo "上传的文件: " . $file_name . "<br />";
echo "文件类型: " . $file_ext . "<br />";
echo "文件大小: " . ($file_size / 102400) . " Kb<br />";
echo "临时文件: " . $tmp_name . "<br />";
//创建文件夹
$ymd = date("Ymd");
$save_path .= $ymd . "/";
$save_url .= $ymd . "/";
if (!file_exists($save_path)) {
mkdir($save_path);
}

//移动文件
$file_path = $save_path . $file_name;
@chmod($file_path, 0644);//修改目录权限(Linux)
if (move_uploaded_file($tmp_name, $file_path) === false) {//开始移动
exit("返回错误: 上传文件失败。($file_name)");
}

}
function filekzm($a)
{
$c=strrchr($a,'.');
if($c)
{
return $c;
}else{
return '';
}
}

function getGet($v)// 获取GET
{
if(isset($_GET[$v]))
{
return $_GET[$v];
}else{
return '';
}
}

function getPost($v)// 获取POST
{
if(isset($_POST[$v]))
{
return $_POST[$v];
}else{
return '';
}
}
?>
展开
 我来答
轻松又清澈的纯真A
2013-03-25 · TA获得超过320个赞
知道小有建树答主
回答量:323
采纳率:100%
帮助的人:371万
展开全部
修改这一行代码:

  //移动文件
  // $file_path = $save_path . $file_name;
  $file_path = $save_path . microtime( TRUE ) . '.' . $file_ext;

原因:
windows和该代码的文件名编码不一致,windows是GB编码,你的代码是UTF编码,所以直接用文件原始文件名会导致乱码。
只要是文件上传的地方统统要修改文件名,客户端的文件名可以写在数据库里面。
更多追问追答
追问
添加成功了,不过不是我要的效果,我不要把文件名更改了,我想要原来的中文名字来
追答
php文件存储在服务端,文件存储不能使用客户端的名字。
你想,两人都传了一个 a.doc 那第二个人的会覆盖第一个人的,但你一定是希望两个人的 a.doc 都保留下来对吧!

原来的名字你可以保存到数据库里面,在数据库里面记录下当前文件的原始名称是什么。
程教燕
2013-03-25
知道答主
回答量:24
采纳率:0%
帮助的人:16.7万
展开全部
看看数据库的编码格式是否与本页的编码格式是否一致?不一致的话可能会引发这种问题,另外中文一般的话都用GB2312的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
思行变邦
2013-03-26 · TA获得超过164个赞
知道小有建树答主
回答量:277
采纳率:100%
帮助的人:159万
展开全部
你在数据库代码里面 添加一句话 set names utf8,试试!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ad77cf5
2013-03-25 · 超过27用户采纳过TA的回答
知道答主
回答量:65
采纳率:0%
帮助的人:41.3万
展开全部
两个字。编码
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式