Rumah  >  Artikel  >  pembangunan bahagian belakang  >  SWFUpload 上传保留时会删掉中文字符

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

WBOY
WBOYasal
2016-06-13 12:15:44792semak imbas

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 />

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn