2016-07-10 16 views
0

我有一些文件,並顯示目錄(上Windows,但最終我將運行在Mac和Linux相同的腳本),在名稱中使用非拉丁字符,例如:PHP - 讀非拉丁字符目錄/文件名

方位名稱01 - Проверка - X

我想讀取該名稱並打印它,但沒有成功 - 我總是得到01 - ???????? - X

我曾嘗試:

$items = scandir('c:/myDir/'); 
$name = $items[2]; 

echo mb_detect_encoding($name); // Returns "ASCII" 
echo '<br>'; 

echo $n = mb_convert_encoding($name, 'UTF-8', 'Windows-1252'); 
echo '<br>'; 
echo base64_encode($n); 
echo '<br><br>'; 

echo $n = mb_convert_encoding($name, 'UTF-8', 'ISO-8859-1'); 
echo '<br>'; 
echo base64_encode($n); 
echo '<br><br>'; 

echo $n = mb_convert_encoding($name, 'UTF-8', 'ISO-8859-15'); 
echo '<br>'; 
echo base64_encode($n); 
echo '<br><br>'; 

echo $n = mb_convert_encoding($name, 'Windows-1252', 'UTF-8'); 
echo '<br>'; 
echo base64_encode($n); 
echo '<br><br>'; 

echo $n = mb_convert_encoding($name, 'ISO-8859-1', 'UTF-8'); 
echo '<br>'; 
echo base64_encode($n); 
echo '<br><br>'; 

echo $n = mb_convert_encoding($name, 'ISO-8859-15', 'UTF-8'); 
echo '<br>'; 
echo base64_encode($n); 
echo '<br><br>'; 

echo $n = iconv('WINDOWS-1252', 'UTF-8', $name); 
echo '<br>'; 
echo base64_encode($n); 
echo '<br><br>'; 

echo $n = iconv('ISO-8859-1', 'UTF-8', $name); 
echo '<br>'; 
echo base64_encode($n); 
echo '<br><br>'; 

echo $n = iconv('ISO-8859-15', 'UTF-8', $name); 
echo '<br>'; 
echo base64_encode($n); 
echo '<br><br>'; 

echo $n = iconv('UTF-8', 'WINDOWS-1252', $name); 
echo '<br>'; 
echo base64_encode($n); 
echo '<br><br>'; 

echo $n = iconv('UTF-8', 'ISO-8859-1', $name); 
echo '<br>'; 
echo base64_encode($n); 
echo '<br><br>'; 

echo $n = iconv('UTF-8', 'ISO-8859-15', $name); 
echo '<br>'; 
echo base64_encode($n); 
echo '<br><br>'; 

在結果我總是有相同的線(我base64編碼它叟,你可以看到它是同一條線路)

ASCII 
01 - ???????? - X 
MDEgLSA/Pz8/Pz8/PyAtIFg= 

01 - ???????? - X 
MDEgLSA/Pz8/Pz8/PyAtIFg= 

01 - ???????? - X 
MDEgLSA/Pz8/Pz8/PyAtIFg= 

01 - ???????? - X 
MDEgLSA/Pz8/Pz8/PyAtIFg= 

01 - ???????? - X 
MDEgLSA/Pz8/Pz8/PyAtIFg= 

01 - ???????? - X 
MDEgLSA/Pz8/Pz8/PyAtIFg= 

01 - ???????? - X 
MDEgLSA/Pz8/Pz8/PyAtIFg= 

01 - ???????? - X 
MDEgLSA/Pz8/Pz8/PyAtIFg= 

01 - ???????? - X 
MDEgLSA/Pz8/Pz8/PyAtIFg= 

01 - ???????? - X 
MDEgLSA/Pz8/Pz8/PyAtIFg= 

01 - ???????? - X 
MDEgLSA/Pz8/Pz8/PyAtIFg= 

01 - ???????? - X 
MDEgLSA/Pz8/Pz8/PyAtIFg= 

能有什麼我做了嗎?

P.S.我最終想要實現的目標是什麼,我需要比較兩個目錄,並且當我將一個目錄的內容與其他目錄進行比較時,我無法將其與另一個目錄進行比較,因爲目錄/文件名已損壞 - 我的腳本獲取的名稱爲01 - ???????? - X,顯然無法找到此類subdir第二(比較)目錄。

回答

2

其實我以前的回答不對。問題是PHP5不支持文件操作的UTF-8。

解決方法是使用類似WFIO的東西,它公開它自己的文件流協議,並允許PHP在文件操作中處理UTF-8字符。您可以在自述文件中看到語法爲:

scandir("wfio://directory") 

祝您好運!

+0

謝謝你的答案,但不幸的是,它並沒有幫助 - 與上面相同的結果:( – SmxCde

+0

我剛剛提供了一個更新..它可能不是你正在尋找的答案 – bitten

+1

這正是我目前需要的,所以謝謝你! – SmxCde