2015-06-28 47 views
0

我正在使用php glob()函數來查找目錄中的匹配文件。php glob函數和非ASCII字符

glob("*.txt"); 

它適用於包含ascii字符的文件名,例如sports.txt,frys.txt等。但是,它不適用於包含非ascii字符的文件名,例如pénètre.txt。

有什麼想法?

+1

windows或* nix?據我所知, – 2015-06-28 00:13:50

+0

PHP不提供本地Unicode支持。 PHP只支持一個256個字符的集合。 – Asim

回答

1

我試圖運行此代碼,以我的本地計算機

<?php 
foreach (glob("*.html") as $filename) { 
    echo "$filename size " . filesize($filename) . "\n<br>"; 
} 
?> 

和我包括一個pènétre命名爲你寫的文件,但我沒有任何錯誤清晰的輸出:

cookie.html size 357 
pénètre.html size 7719 

我PHP版本是1.6.2。嘗試運行此代碼,並告訴我,如果您遇到任何問題。

+1

你是對的。但是,這個問題出現在glob(「*。pénètre.html」)中,其中*位於pénètre.html之前,我正在使用Windows。 – FoxShrill

+0

我明白了。如果你不能使用wildchar glob(「*。html」),並且你在函數中輸入了任何非ascii字符,你必須用\來轉義那些。嘗試glob(「\\ *。pénètre.html」),如果文件名是*.pénètre.html,它應該可以工作(我嘗試在我的本地機器上,儘管我有一臺Mac)。 –

+0

我的意思是,*是一個ascii字符,但由於它有特殊的含義,所以你必須逃避它。例如,如果你的文件名是¢*.pénètre.html,你的函數將是glob(「\\\\\ *。pénètre.html」) –