0

在此处输入图像描述我有这个 php 函数:

function upload_file($f,$fn){
switch($f['type']){
case 'image/jpeg':$image = imagecreatefromjpeg($f['tmp_name']);break;
case 'image/png':case 'image/x-png':move_uploaded_file($f['tmp_name'],'../images/pc/'.$fn.'.png');break;
case 'image/pjpeg':$image = imagecreatefromjpeg($f['tmp_name']);break;
echo $f['type'],'<br />';
}
if(!empty($image)) imagejpeg($image,'../images/pc/'.$fn.'.png');
}    

其中 $fn = "нова-категория" 但是当我将重命名的文件上传到服务器时 - 图像名称已损坏,如下所示:РЅРѕРІР°-категория.png

有趣的是,如果我尝试访问服务器上的图像:site.com/images/pc/нова-категория.png => 我可以看到图像.. 你能告诉我是什么阻止了图像名称的外观普通的?

4

1 回答 1

0
  1. 当您使用 ftp 客户端浏览 ftp 时,您会看到 ANSI 编码的名称(单字节编码)。在这种情况下РЅРѕРІР°-категория.png实际上是 UTF-8(双字节)编码的нова-категория.png

  2. 当您将文件上传到 Web 服务器时,浏览器会将文件名中的非 unicode 符号转换为 UTF-8(нова-категория.png变为РЅРѕРІР°-категория.png

  3. 当您site.com/images/pc/нова-категория.png再次请求浏览器将非 unicode 符号转换为 UTF-8 时,服务器实际上会查找РЅРѕРІР°-категория.png(在 ASCI 编码中)。

因此,如果您想在 ftp-client 中看到“正常”名称,您应该将它们转换为您的本机编码

function upload_file($f,$fn){
$fn=iconv("UTF-8","Windows-1251",$fn);
switch($f['type']){
...

但在这种情况下,您的文件的 URL 会出现问题。要将正确的 URL 写入 ANSI 编码的名称,您应该使用以下 php 代码:

echo "site.com/images/pc/".rawurlencode("нова-категория.txt");

您应该处理文件名的方式取决于您对这些文件的使用。但我不建议您转换它们。如果你有问题,我认为它不是“坏”的名字。

于 2014-03-20T14:31:53.523 回答