【发布时间】:2012-04-11 09:23:34
【问题描述】:
我有一个 Apache 服务器 (CentOS),我在其中托管一个页面。在此页面上,我可以上传文件并删除它们。上传和显示文件名工作正常。困扰我的事情是删除包含以下字符的文件:ČŠŽ(我猜是编码问题)。
č Č ž Ž š Š.txt 在上传文件夹中显示为 ÄŤ ÄŚ Ĺľ Ĺ˝ š Ĺ .txt。
有人知道哪里出了问题吗?
提前感谢您的回复。
这是上传代码:
<?php
if (!empty($_FILES)) {
$tempFile = $_FILES['Filedata']['tmp_name'];
// Generate timestamp
date_default_timezone_set('UTC');
$timeStamp = strtotime("now");
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';
$targetFile = str_replace('//','/',$targetPath) . $timeStamp . "_" . $_FILES['Filedata']['name'];
if( move_uploaded_file($tempFile,$targetFile)){ //source, destination
echo true;
}else{
echo false;
}
}
?>
我决定替换文件名中的特殊字符:
$subject = $_FILES['Filedata']['name'];
$search = array('č', 'Č', 'ž', 'Ž', 'š', 'Š', 'ć', 'Ć', 'đ', 'Đ');
$replace = array('c', 'C', 'z', 'Z', 's', 'S', 'c', 'C', 'd', 'D');
$subject = str_replace($search, $replace, $subject);
【问题讨论】:
-
不知道如何解决这个问题,但面向未来;我建议在将它们存储到文件系统之前清理文件名。
-
这可能行不通,但你可以尝试在你的 apache 的 httpd.conf 中添加 AddDefaultCharset utf-8 这就是我现在能想到的。
-
@lexalizer :该选项已在 httpd.conf 文件中设置为 UTF-8。
-
然后我会尝试从文件名中删除特殊字符,前段时间我在上传用日语写的文件时遇到了类似的问题。如何在没有扩展名的文件名上调用 urlencode() 然后将其保存在服务器上?这应该可以工作并为您提供更优雅的解决方案。您还可以散列文件名。到目前为止,我能想到的就这些了。
-
你用什么来查看文件夹的内容?