file_exists Linux 上找不到包含 & 号的文件名

file_exists can't find filename including ampersand on Linux

提问人:Rodrigo 提问时间:10/25/2022 最后编辑:Rodrigo 更新时间:10/25/2022 访问量:67

问:

我有两个文件:一个叫,另一个叫.对于每个,我运行以下 PHP 代码:AB.txtA&B.txt

echo "[$arq]";
if (file_exists($arq)) {
    echo '[found]';
} else {
    echo '[none]';
}

输出为 和 。[AB.txt] [found][A&B.txt] [none]

我尝试用内部替换,但它也不起作用。而且这似乎不是(缺乏)UTF-8 的问题。&\&file_exists()

为什么?我在一台 Linux (Debian 11) 机器上,使用 PHP 7.4。

编辑

var_dump(scandir('.'));

返回数百个文件(实际上它们位于子目录中,但让我们假装它们不是)。我已从下面的列表中删除了所有其他文件。

array(352) { [302]=> string(7) “A&B.txt” [303]=> string(6) “AB.txt” }

编辑 2

var_dump($f = "diffA&B.txt", file_exists($f), touch($f), file_exists($f));

字符串(11) “diffA&B.txt” bool(false) bool(true) bool(true)

php 文件存在 &

评论

0赞 Progman 10/25/2022
你如何设置值?使用文件名时的输出是什么?$arqvar_dump($arq);A&B.txt
0赞 Rodrigo 10/25/2022
@Progman $arq来自_POST美元。 var_dump给string(7) "A&B.txt"
0赞 Khaled Hassan 10/25/2022
尝试使用 scandir 方法并使用 in_array() 检查是否存在
0赞 Rodrigo 10/25/2022
@KhaledHassan谢谢。我也可以使用glob,但我想知道为什么file_exists在这里不起作用。
1赞 Progman 10/26/2022
@Rodrigo 将来:不要更改任何请求的调试信息。该行显示字符串的长度和内容,如果您显示了实际输出,则很容易看出字符串长度与可见字符串内容不匹配。var_dump()

答: 暂无答案