>  기사  >  백엔드 개발  >  SWFUpload 上传保留时会删掉中文字符

SWFUpload 上传保留时会删掉中文字符

WBOY
WBOY원래의
2016-06-13 12:15:44821검색

SWFUpload 上传保存时会删掉中文字符?
用SWFUpload上传,文件名是英文的话完全没有问题,可是如果是中文的话就会不显示出来,这回怎么一回事?要在哪里修改呢?
首先我上传的文件包含中文字符


上传至upload文件夹后 文件名为(之前的日期是自己添加的),也就是说这里只有“biao”,“中文的”三个字没了


在数据库中文件名及路径显示完整的


upload.php修改如下
// $file_name = preg_replace('/[^'.$valid_chars_regex.']|\.+$/i', "", basename($_FILES[$upload_name]['name']));
$file_name = basename($_FILES[$upload_name]['name']);
$file_name=iconv("UTF-8","GB2312",$file_name); 

不知如何解决此问题,请各位高手支招~

------解决思路----------------------

$fn = '中文文件名.txt';<br />echo basename($fn);
.txt

这是 php 的老问题:不能识别中文路径(文件名)

不过:
1、上传的文件名本来就不含路径的,无需 basename
2、使用中文文件明的话,就有与操作系统默认字符集矛盾的问题
3、如果不重新命名长传的文件,如果遇到同名文件你如何处理?
------解决思路----------------------
不建议使用中文文件名,原因版主已经说明了。

同名文件打算在文件名后面加一串时间(精确到秒)不知可否?
建议每上传一个文件,都用时间+随机数来生成文件名,不要使用原来的文件名。
<br />$oldname = 'myfile.xlsx';<br />$newname = createFileName($oldname);<br />echo $newname;<br /><br />function createFileName($name){<br />    // 获取后缀<br />    $name = explode('.', $name);<br />    $ext = array_pop($name);<br /><br />    // 获取微秒数<br />    $r = explode('.',microtime(true));<br />    $r = array_pop($r);<br /><br />    // 生成newname<br />    $newname = date('YmdHis').$r.mt_rand(1000,9999).'.'.$ext;<br />    return $newname;<br />}<br />

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.