3

我有一个 UNIX 服务器正在运行。我有一个程序,可以将图像上传到我的服务器。

但我对这些字符有一些问题:ø æ å

在我的程序中,我使用

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

示例

我上传了一张名为påske.png

在我的服务器上,我可以看到图片被称为påske.png

在我的数据库中,名称påske.png也被保存。

如果我随后手动尝试查看我的图片,则会收到错误消息

我输入:www.myserver.com/uploads/påske.png

Error: /uploads/påske.png was not found on this server.
4

3 回答 3

5

您不应该将特殊字符直接保存为文件名。给他们一个新的名字,比如时间戳,或者用英文等价物替换空格字符。

你所拥有的是正常的,那么你的服务器/网络服务器有一个默认的字符集,例如UTF-8。Linux 中的特殊字符显示在此字符集中。

编辑:

在使用 PHP 上传文件之前替换特殊字符

于 2012-11-02T09:05:40.180 回答
2

或者,您可以使用此类在上传期间更改文件名

* normal - converts each special character (áéíÁÈÒÖ) to their 
normal character (aeiAEOO)

string $class->normal(string string);

Example: 
print $strings->normal("faço áeéíàÒ");
# will output: faco aeeiaO
于 2012-11-02T09:28:56.673 回答
1

试试这个。

function de_danishify_filename_on_upload($filename) {
if("do a check") return $filename; // Checks to see if a string is utf8 encoded

$filter_chars = array(
    // Character mapping from UTF-8 characters to ASCII characters. 
    chr(195).chr(134) => 'AE',  // &AElig; to Ae
    chr(195).chr(166) => 'ae',  // &aelig; to ae
    chr(195).chr(152) => 'OE',  // &Oslash; to OE
    chr(195).chr(184) => 'oe',  // &oslash; to oe
    chr(195).chr(133) => 'AA',  // &Aring; to AA
    chr(195).chr(165) => 'aa'   // &aring; to aa
);
$translated = strtr($filename,$filter_chars); // Translate characters

return $translated;
}
于 2013-03-30T14:32:34.580 回答