2010-08-23 51 views
7

在我的本地機器上,我有兩個文件:READDIR和SCANDIR

IMG_9029_измен.размер.jpgsłońce32 opalenier1.jpg

我想SCANDIR()或READDIR()獲得主題文件名,但不能得到extractly文件名。他們是這樣的:

IMG_9029_?????.??????.jpg and slonce32 opalenier.jpg 

Window XP SP3, php5.2.12 

我怎麼能得到像IMG_9029_измен.размер.jpg and słońce32 opalenier1.jpg這樣的文件名?

+0

你的文件名是unicode嗎?當你輸出文件名到你的網頁時,是否也是unicode中的網頁編碼? – minghan 2010-08-23 04:57:15

+0

http://stackoverflow.com/questions/977635/how-to-open-file-in-php-that-has-unicode-characters-in-its-name – Bakudan 2011-12-29 00:58:33

回答

1

名稱可能是正確的,但您需要將頁面的編碼設置爲UTF-8。

添加到您的網頁的標題部分:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 

那麼你的字符串轉換爲UTF8這樣的特殊字符正確顯示。

我做了,做它的功能,它被稱爲Encoding::toUTF8().

用法:

$utf8_string = Encoding::toUTF8($utf8_or_latin1_or_mixed_string); 

下載:

http://dl.dropbox.com/u/186012/PHP/forceUTF8.zip

+1

謝謝suggestion.filename更改爲IMG_9029_ ?? ???當我使用readdir()或scandir()時。如何用這個名字進行編碼。我認爲這是不可能的 – Chameron 2010-08-24 02:18:09

8

我假設你的PHP編碼是UTF-8。

$files = scandir($dirname); 
foreach ($files as $file) { 
    $filename = iconv ("windows-1251" , "UTF-8", $file); 
    echo $filename ."\n"; 
} 

它應該爲第一個文件工作,但我不知道哪個編碼用於第二個文件。

主要問題是php 5不支持utf-8的文件操作。它在內部是ansi。所以它使用ansi api讀取文件名(只有8位編碼)。