2012-05-24 87 views
1

file_exists(“file_å.txt”);在Linux机器上使用PHP file_exists和特殊字符(如ØØÆ)

返回false while file is there。有没有什么可以让* file_exists *看到这种名称的文件?

谢谢。

+2

可能重复[特殊字符“file_exists”的问题(PHP)( http://stackoverflow.com/questions/2685718/special-characters-in-file-exists-problem-php) – Treffynnon

+0

另请参阅https://bugs.php.net/bug.php?id=46990 – Treffynnon

+0

不重复。该主题与基于Windows的框有关。但是,感谢您的链接! –

回答

1

检查您的PHP脚本所在的编码。可能与文件系统不同。 (如LATIN1与UTF-8)

+0

是的,该文件是UTF-8。不知道如何检查我的提升机的文件系统是什么编码。会让你更新。并感谢提示。 –

+1

你确定你的php文件是UTF8吗? (不是file_a.txt文件) – periklis

+0

iconv('UTF-8','ISO-8859-1','file_å.txt')在浏览器中提供了正确的文件命名,但是* file_eixsts *不能检查它是否存在。 –

2

尝试

file_exists(mb_convert_encoding("file_å.txt", "UTF-8"));

假设文字是不是UTF-8

+0

谢谢,这没有奏效。 –

+0

工作对我来说:D – DaMouse404

2

检查这个答案: https://stackoverflow.com/a/2685818/190791

我的解决方案是转换为windows文件格式:

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

这对我的文件名有 - 符号在其中工作。谢谢! –

0

例如,当我从Excel中读取文件名并在磁盘上查找给定的路径时,我已经运行了几次。问题可能是“ä”或者是特定的unicode字符(\ u00e4)或者它的“组合禁止”形式(a \ u0308),即带有两个点的“a”。

由于php 5.3的最佳解决方案是使用Normalizer库。 您可能需要sudo apt-get install php5-intl才能将该类放入您的PHP中。之后,仅仅

$normalizer = new \Normalizer(); 
$normalizer->normalize($val, \Normalizer::FORM_D) 

即使世界的第二个参数的几个不同的形式,所以你必须查找你需要其中之一