【发布时间】:2015-06-29 17:27:35
【问题描述】:
目前我正在尝试使用 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 并没有将 � 作为撇号进行解释。
【问题讨论】:
-
可能相关的事情:您的脚本在哪个服务器上失败了?是windows机器吗? Linux?
-
如果我正确理解您的问题,那么如果您正在寻找 13067-AP-03 A - Situation projetee.pdf(不带重音),您确实会找到该文件。如果是这种情况,您可能会尝试在搜索之前对输入字符串运行字符串替换或正则表达式?
-
它在我的机器上正常工作。你的 PHP 脚本的编码是什么,你在 php.ini 中的
default_charset设置的值是多少? -
检查 php 文件本身是否也是 UTF-8 编码的。如果不是,则 php 脚本中的文件名将与文件系统中的不同。
-
在调用
file_exists之前,您是否尝试过相反的iconv?看起来文件系统函数需要 437 而您的源文件是 UTF-8。
标签: php file-exists apostrophe