“file_exists”问题中的特殊字符(php)

时间:2010-04-21 18:54:01

标签: php html character-encoding

我使用特殊字符(瑞典字母åäö)。

现在,我有一些文件夹,其中包含分类广告的图像。 文件夹按类别命名。

for ($i=1; $i<=5; $i++){
    if (file_exists($big_images.$i.'.jpg')){ echo "Inne";
        unlink($big_images.$i.'.jpg');
    }
    if (file_exists($thumb_images.$i.'.jpg')){
        unlink($thumb_images.$i.'.jpg');
        }
    }

我的网站上最多允许5张图片,每张图片的结尾为1-5张。 但是,我的问题是,只要文件夹名称有一个特殊字符,file_exists就会返回false,即它找不到该文件。 即使它在那里。

所有文件均采用utf-8格式。

当文件夹名称中没有特殊字符时,此方法有效。

如果您需要更多输入,请告诉我

1 个答案:

答案 0 :(得分:22)

什么是服务器操作系统?

如果是Windows,则无法以UTF-8编码的文件名访问文件,因为PHP使用的C IO库的Windows实现只能在系统默认代码页中进行通信。对于西欧安装,这是代码页1252.您可以使用iconv将UTF-8字符串转换为cp1252:

$winfilename= iconv('utf-8', 'cp1252', $utffilename);

utf8_decode也可以使用,但它会为Windows的扩展字符提供错误的结果,这些字符映射到cp1252中的0x80-0x9F范围。)

使用stdio的PHP和其他程序根本无法访问其名称包含系统代码页的所有字符之外的字符的文件(例如,西方框中的希腊语)。有些脚本语言可以通过Win32 API使用原生Unicode文件名,但PHP5不是其中之一。

当然,在文件系统采用UTF-8编码的不同操作系统上部署时,不应使用上述步骤。 (即现代Linux。)

如果您需要与PHP无缝地跨服务器兼容,则必须避免在文件名中使用非ASCII字符。遗憾。