2012-05-24 15 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) 

即使世界的第二個參數的幾個不同的形式,所以你必須查找你需要其中之一