目前,我正在尝试使用PHP检查文件是否存在。我要检查的文件名中包含一个撇号,该文件名为: 13067-AP-03 A - Situation projetée.pdf。
我用来检查文件是否存在的代码如下:
$filename = 'C:/13067-AP-03 A - Situation projetée.pdf';
if (file_exists($filename))
{
echo "The file exists";
} else
{
echo "The file does not exist";
}
我现在面临的问题是,每当我试图检查文件是否存在时,都会收到“文件不存在”的消息。如果我继续删除é,我会收到文件确实存在的消息。
看起来PHP无法识别文件名中的撇号。我尝试了以下解决方法:
urlencode($filename);
addslashes($filename);
utf8_encode($filename);
所有这些都没有起作用。我还尝试了以下方法:
setlocale(LC_ALL, "en_US.utf8");
值得注意的是,当我从PHP获取文件名时,我会得到以下内容: 13067-AP-03 A - Situation projet�e.pdf
为了正确显示文件名,我必须执行以下操作:
$filename = iconv( "CP437", 'UTF-8', $filename);
我想知道是否有人遇到过同样的问题,能帮助我解决这个问题。非常感谢任何帮助。
对于那些感兴趣的人,该脚本在Windows机器上运行。
奇怪的是,这个方法有效:我将Sublime Text 3中的所有源代码复制到记事本中。然后我用记事本保存源代码,覆盖PHP文件。
现在,当我检查文件是否存在时,它显示存在以下文件名:
13067-AP-03 A - Situation projet�e.pdf
我目前遇到的唯一问题是,我想使用file_get_contents下载文件。但是,file_get_contents无法将�解释为撇号。
php.ini
中的default_charset
设置值是多少? - Frederick Zhangfile_exists
之前,你尝试过使用反向的iconv
吗?看起来文件系统函数期望的是 437 编码,而你的源文件是 UTF-8 编码。 - Jon