一尘不染

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

php

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

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

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格式。

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

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


阅读 440

收藏
2020-05-29

共1个答案

一尘不染

什么是服务器操作系统?

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

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

utf8_decode也可以使用,但是对于映射到cp1252中范围0x80-0x9F的Windows扩展字符,它将给出错误的结果。)

PHP和其他使用stdio的程序完全无法访问名称中包含系统代码页指令表之外的字符的文件(例如,在西方语言中为希腊语)。有一些脚本语言可以通过Win32
API使用本机Unicode文件名,但是PHP5并不是其中一种。

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

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

2020-05-29