图片上传 - PHP上传中文名图片失败?

WBOY
Release: 2016-06-06 20:28:22
Original
2033 people have browsed it

我程序里面有个PHP上传图片的功能,但是放在服务器上上传中文名称的图片,图片不能显示出来,看了目录中的图片,是上传图片之后存在目录里面乱码了。下面是我的代码,不知道是哪里出了问题

`public function _upload(){

<code>    $type = trim($_POST['uptype']);
    $callback = trim($_POST['upcallback']);
    if($type=='image'){
        $ext = getFileExt($_FILES['upfile']['name']);
        if(!file_exists(DIR_UPLOAD.'/images/'.date("Ymd"))){
            makeDir(DIR_UPLOAD,'/images/'.date("Ymd"));
        }
        if($ext =='jpg' || $ext =='png'  || $ext =='gif' || $ext =='doc' || $ext =='txt' || $ext =='pdf' || $ext =='ico' ){
            $upfile = DIR_UPLOAD.'/images/'.date("Ymd").'/'.date("His").'_'.iconv("gb2312", "UTF-8", $_FILES['upfile']['name']);
            $upfilepath = '/images/'.date("Ymd").'/'.date("His").'_'.iconv("gb2312", "UTF-8", $_FILES['upfile']['name']);
            $upfileurl = URL_UPLOAD.'/images/'.date("Ymd").'/'.date("His").'_'.iconv("gb2312", "UTF-8", $_FILES['upfile']['name']);
            move_uploaded_file($_FILES['upfile']['tmp_name'],$upfile);
            $filecg = trim($_POST['filecg']);
            if(!$filecg){
                $filecg = 1;
            }
            if($callback){
                echo '<script type="text/javascript">parent.'.$callback.'("'.$upfileurl.'");</script>';
            }
            die();
        }
    }
    echo '<script type="text/javascript">parent.alert("上传出错");</script>';
</code>
Copy after login
Copy after login

我的HTML 中 使用的均是UTF-8`

我这个如何修改才能上传中文文件名图片呢?
我的服务器是win2003 是不是因为服务器win2003 是gbk的关系呢

回复内容:

我程序里面有个PHP上传图片的功能,但是放在服务器上上传中文名称的图片,图片不能显示出来,看了目录中的图片,是上传图片之后存在目录里面乱码了。下面是我的代码,不知道是哪里出了问题

`public function _upload(){

<code>    $type = trim($_POST['uptype']);
    $callback = trim($_POST['upcallback']);
    if($type=='image'){
        $ext = getFileExt($_FILES['upfile']['name']);
        if(!file_exists(DIR_UPLOAD.'/images/'.date("Ymd"))){
            makeDir(DIR_UPLOAD,'/images/'.date("Ymd"));
        }
        if($ext =='jpg' || $ext =='png'  || $ext =='gif' || $ext =='doc' || $ext =='txt' || $ext =='pdf' || $ext =='ico' ){
            $upfile = DIR_UPLOAD.'/images/'.date("Ymd").'/'.date("His").'_'.iconv("gb2312", "UTF-8", $_FILES['upfile']['name']);
            $upfilepath = '/images/'.date("Ymd").'/'.date("His").'_'.iconv("gb2312", "UTF-8", $_FILES['upfile']['name']);
            $upfileurl = URL_UPLOAD.'/images/'.date("Ymd").'/'.date("His").'_'.iconv("gb2312", "UTF-8", $_FILES['upfile']['name']);
            move_uploaded_file($_FILES['upfile']['tmp_name'],$upfile);
            $filecg = trim($_POST['filecg']);
            if(!$filecg){
                $filecg = 1;
            }
            if($callback){
                echo '<script type="text/javascript">parent.'.$callback.'("'.$upfileurl.'");</script>';
            }
            die();
        }
    }
    echo '<script type="text/javascript">parent.alert("上传出错");</script>';
</code>
Copy after login
Copy after login

我的HTML 中 使用的均是UTF-8`

我这个如何修改才能上传中文文件名图片呢?
我的服务器是win2003 是不是因为服务器win2003 是gbk的关系呢

我自己想了个办法、
就是把替换掉文字
$upfilepath = '/images/'.date("Ymd").'/'.date("His").''.preg_replace('[^a-z0-9-_.]i','',$_FILES'upfile');

虽然可以 显示图片了, 但是很勉强

这个与http协议有关。上传之前抓个包,看看你的程序是gbk为主还是utf-8为主。确定之后再去对应的iconv。

服务器是linux?看看是不是支持中文

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template