2010-08-23 11 views
7

Na moim komputerze localhost, mam dwa pliki:readdir i scandir

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

chcę uzyskać nazwę pliku tematów przez scandir readdir() lub() ale nie może dostać extractly Nazwa pliku. Są to tak:

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

Window XP SP3, php5.2.12 

Jak mogę uzyskać nazwa_pliku jak IMG_9029_измен.размер.jpg and słońce32 opalenier1.jpg?

+0

Czy nazwa pliku jest w kodzie Unicode? a kiedy wypiszesz nazwy plików na stronie internetowej, czy strona też jest kodowana w Unicode? – minghan

+0

http://stackoverflow.com/questions/977635/how-to-open-file-in-php-that-has-unicode-characters-inits-name – Bakudan

Odpowiedz

1

Nazwy prawdopodobnie mają rację, ale musisz ustawić kodowanie swojej strony na UTF-8.

Dodaj to do sekcji nagłówka stron

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

następnie przekształcić swoje struny do UTF8 więc znaki specjalne wyświetlane poprawnie.

Zrobiłem funkcję, która robi, to się nazywa Encoding::toUTF8().

Zastosowanie:

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

Download:

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

+1

dzięki za sugestię. Nazwa pliku została zmieniona na IMG_9029_ ?? ???. ??????. jpg kiedy używam readdir() lub scandir(). jak kodować z tą nazwą. Myślę, że nie jest to możliwe – Chameron

8

Zakładam, że kodowanie php jest UTF-8.

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

Powinien działać dla pierwszego pliku, ale nie wiem, jakie kodowanie użyć dla drugiego pliku.

Głównym problemem jest to, że php 5 nie obsługuje utf-8 dla operacji na plikach. Jest wewnętrznie ansi. Czyta nazwy plików za pomocą ansi api (tylko kodowanie 8-bitowe).

Powiązane problemy