Bläddra i källkod

Fixed:上传下载文件名支持中文

Zhu Jinhui 7 år sedan
förälder
incheckning
e67df42fd2
3 ändrade filer med 41 tillägg och 5 borttagningar
  1. 35 0
      src/Functions/Funcs.php
  2. 1 1
      src/Library/Download.php
  3. 5 4
      src/Library/Upload.php

+ 35 - 0
src/Functions/Funcs.php

@@ -120,3 +120,38 @@ function _require($files)
 	return \Qii\Autoloader\Import::requires($files);
 }
 
+/**
+ * 将字符串转换成指定编码
+ *
+ * @param string $str 需要转换的字符串
+ * @param string $to  转换到的编码
+ * @return string
+ */
+function converCode($str, $to)
+{
+    $fromCode = mb_detect_encoding($str, array('ASCII', 'UTF-8', 'GB2312', 'GBK', 'BIG5'));
+    if($fromCode == $to) return $str;
+    return mb_convert_encoding($str, $to, $fromCode);
+}
+
+/**
+ * 将字符串转换成格式
+ *
+ * @param string $str 需要转换的字符串
+ * @return string
+ */
+function toUTF8($str)
+{
+	return converCode($str, 'UTF-8');
+}
+
+/**
+ * 将字符串转换成GBK
+ *
+ * @param string $str 文本
+ * @return string
+ */
+function toGBK($str)
+{
+	return converCode($str, 'GBK');
+}

+ 1 - 1
src/Library/Download.php

@@ -122,7 +122,7 @@ class Download
 			header('Content-Transfer-Encoding: binary');
 			header("Accept-Ranges: bytes");
 			header("Accept-Length: ".  filesize($filePath));
-			$fileName = iconv("UTF-8", "GB2312//TRANSLIT", $fileName);
+			$fileName = toGBK($fileName);
 			if($view == 'download')
 			{
 				header("Content-Disposition: attachment; filename=". $fileName);

+ 5 - 4
src/Library/Upload.php

@@ -402,19 +402,20 @@ class Upload
 				return $data;
 			}
 		}
+		$realPath = rtrim($fillPath, '/') . '/' . toGBK($configure['fileName']);
 		if($files['binary'])
 		{
-			$result = rename($files['tmp_name'], $fillPath . '/' . $configure['fileName']);
+			$result = rename($files['tmp_name'], $realPath);
 		}
 		else
 		{
-			$result= move_uploaded_file($files['tmp_name'], $fillPath . '/' . $configure['fileName']);
+			$result= move_uploaded_file($files['tmp_name'], $realPath);
 		}
 		if ($result) {
 			$data['code'] = 0;
-			$data['src'] = $fillPath . '/' . $configure['fileName'];
+			$data['src'] = toUTF8($realPath);
 			$data['file_type'] = $files['type'];
-			$data['file_hash'] = md5_file($data['src']);
+			$data['file_hash'] = md5_file($realPath);
 			$data['size'] = $files['size'];
 		} else {
 			$data['src'] = '';