2010-08-23 12 views
7

En mi máquina localhost, que tienen dos archivos:readdir y scandir

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

Quiero conseguir el nombre de archivo de temas por scandir() o readdir() pero no pueden conseguir extractly nombre del archivo. Ellos son así:

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

Window XP SP3, php5.2.12 

¿Cómo puedo conseguir nombre de fichero como IMG_9029_измен.размер.jpg and słońce32 opalenier1.jpg?

+0

¿Está el nombre de su archivo en Unicode? y cuando saca los nombres de los archivos a su página web, ¿la codificación de la página web también está en Unicode? – minghan

+0

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

Respuesta

1

Probablemente los nombres sean correctos, pero debe establecer la codificación de su página en UTF-8.

añadir esto a la sección de encabezado de sus páginas:

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

luego convertir sus cadenas a UTF8 lo que los caracteres especiales se muestran correctamente.

Hice una función que lo hace, se llama Encoding::toUTF8().

Uso:

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

Descargar:

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

+1

gracias por suggestion.filename se ha cambiado a IMG_9029_ ?? ???. ??????. jpg cuando uso readdir() o scandir(). cómo codificar con este nombre. Creo que no es posible – Chameron

8

que asumir que su php codificación es UTF-8.

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

Debería funcionar para el primer archivo, pero no sé qué uso de la codificación para el segundo archivo.

El problema principal es que php 5 no es compatible con utf-8 para las operaciones de archivos. Es internamente ansi. Por lo tanto, lee los nombres de los archivos utilizando ansi api (solo codificación de 8 bits).

Cuestiones relacionadas