ホームページ  >  記事  >  バックエンド開発  >  文件上传编码有关问题

文件上传编码有关问题

WBOY
WBOYオリジナル
2016-06-13 10:21:09857ブラウズ

文件上传编码问题
用Flash+PHP实现文件的批量上传。PHP在保存文件时,遇到编码问题:

PHP code
<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><?php header("Content-Type:text/html;charset=utf-8");    function createDir($path){        if (!file_exists($path)){            createDir(dirname($path));            mkdir($path, 0777);        }    }    $uploaddir='upfile/'.date('Ymd').'/';    createDir($uploaddir);    $uploadfile=$uploaddir.iconv('utf-8','gbk',$_POST['fn']);    if (move_uploaded_file($_FILES['Filedata']['tmp_name'], $uploadfile)) {        echo 'OK'.$_POST['bn'].'{[(*})]'.$_POST['up'].'{[(*})]'.'$uploadjson'.'{[(*})]'.'$listjson';    }else{        echo 'ERROR';    }?>

文件名很不规范,有中文、英文、法文、俄文、……不确定类型,这时候有些文件保存下来,要么是乱码,要么被截断(扩展名都丢失了)。iconv('utf-8','gbk',$_POST['fn']),这里的问题?该如何做?

------解决方案--------------------
你当前页面用了utf-8
header("Content-Type:text/html;charset=utf-8");


而这个应不该转成gbk
$uploadfile=$uploaddir.iconv('utf-8','gbk',$_POST['fn']);

去掉或是
$uploadfile=$uploaddir.iconv('gbk','utf-8', $_POST['fn']);
试试
------解决方案--------------------
GBK编码的字符串没有俄文这些符号。也就是说它只适用于中文
建议你用utf-8来保存,文件名乱码的问题就这么撂着吧
------解决方案--------------------
$uploadfile = $uploaddir . base64_encode($_POST['fn']) . '.' . pathinfo($_POST'fn'], PATHINFO_EXTENSION);
------解决方案--------------------
你数据源是GBK要怎子搞呢。
iconv用//IGNORE忽略特殊符号转成UTF8、要么就重命名。
------解决方案--------------------
你自己在你的windows机上能够输入俄文,阿拉伯文命名一个文件吗?
文件名要视乎客户操作系统的编码,一般国内用户用的都是中文版windows,系统默认内部编码属GBK,GBK怎么可能包含俄文之类的语种呢。或者换过来说你让操作系统编码为iso-8859-1的用户下载你的中文名文件,中文即使给你转成gbk还不一样乱码。干脆就随机命名好了,不然有啥好方法,全世界各地不同的操作系统用户系统编码千差万别,除非所有都统一用utf-8做内码,你这边也不用费劲用iconv转了。
你看我现在用ubuntu,系统编码就是utf-8的,那些中文俄文法文你不转GBK对我这种用户就算正常的,你转GBK倒还乱码了。呵呵。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。