Heim  >  Artikel  >  Backend-Entwicklung  >  图片上传 - PHP上传中文名图片失败?

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

WBOY
WBOYOriginal
2016-06-06 20:28:221992Durchsuche

我程序里面有个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>

我的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>

我的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?看看是不是支持中文

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn