2013-03-28 11 views
5

nie można odczytać UTF-8 nazw plików z systemu plików Windows (Windows jest głównym językiem angielski)Nie można odczytać UTF-8 nazw plików

<?php 

$path_to_read = 'D:\music'; 

class AudioFilterIterator extends FilterIterator 
{ 
    public function accept() 
    { 
     return (strpos(parent::current(), '.mp3')); 
    } 
} 

$object = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path_to_read)); 

$iterator = new AudioFilterIterator($object); 

echo "<pre>"; 

$files = array(); 

foreach($iterator as $file) 
{ 
    echo $file . "\n"; 
} 

Więc, jako przykład, mam plik o nazwie „10 Hört auf.mp3 ", ale jako wyjście otrzymuję" 10 Hort auf.mp3 "

Jak mogę to naprawić?

+1

Czy próbowałeś utf8_encode()? W każdym razie bardziej sensowne byłoby zapisywanie plików przy użyciu znaków specjalnych, więc problem ten nie istnieje. – Jonast92

+0

Dlaczego zamiast tego należy użyć 'readdir()' i 'preg_match()'? Ten kod jest dość ciężki dla tego, co robi. – Keelan

+1

Czy nazwy plików nie są w systemie Windows zakodowanym w UTF16? zobacz http://stackoverflow.com/a/2051018/393701 – SirDarius

Odpowiedz

0

Nie ma sposobu, aby przejść przez ten błąd, ponieważ PHP działa pod WinAPI, które nie mają uzasadnionej obsługi UTF-8.

+0

masz na myśli, że nie ma problemu na Linuksie? – HPM

+0

MS Windows jest zbudowany na UTF-16, który może być transkodowany na UTF-8 bez żadnych strat. Posiada nawet funkcje transkodowania między UTF-16 i UTF-8. Reszta to tylko kwestia jakości wdrożenia. –

0

Możesz to łatwo zrobić, używając funkcji iconv. Przykład windows:

iconv("WINDOWS-1250", "UTF-8", $name); 
+0

Nie mylić ludzi. WinAPI w ogóle nie może pobrać nazw UTF8, a iconv pomoże ... nic. – Danny

+1

Jak powiedziałem, działa to doskonale dla mnie na Windows 7 i xampp. Możesz też spróbować, zanim napiszesz komentarz. – Sonic03

Powiązane problemy