Ante todo perdon por el retraso.
Al final he decidido usar una función para sanear más caracteres inválidos pero después de tanta lucha me sigue dando error, el código que estoy tratando de utilizar es el siguiente:
Código PHP:
<?php
function reemplazar_caracteres($file) {
$cadena = mb_convert_encoding($cadena, 'UTF-8','');
$cadena = preg_replace("/á|à|â|ã|ª/","a",$cadena);
$cadena = preg_replace("/Á|À|Â|Ã/","A",$cadena);
$cadena = preg_replace("/é|è|ê/","e",$cadena);
$cadena = preg_replace("/É|È|Ê/","E",$cadena);
$cadena = preg_replace("/í|ì|î/","i",$cadena);
$cadena = preg_replace("/Í|Ì|Î/","I",$cadena);
$cadena = preg_replace("/ó|ò|ô|õ|º/","o",$cadena);
$cadena = preg_replace("/Ó|Ò|Ô|Õ/","O",$cadena);
$cadena = preg_replace("/ú|ù|û/","u",$cadena);
$cadena = preg_replace("/Ú|Ù|Û/","U",$cadena);
$cadena = str_replace(" ","%20",$cadena);
$cadena = str_replace("ñ","n",$cadena);
$cadena = str_replace("Ñ","N",$cadena);
$cadena = preg_replace('/[^a-zA-Z0-9_\.-]/', '', $cadena);
return $cadena;
}
?>
Después para llamar a esta función tengo este código (desde la misma página)
Código PHP:
<?php
// ruta
$path = "Facturas/Recibidas/Enero";
// Abrir la carpeta
$dir_handle = @opendir($path);
// Leer los archivos
while ($file = readdir($dir_handle)) {
$data[] = array($file, date("Y-m-d H:i:s",filemtime($path.'/'.$file)));
$files[] = $file;
$dates[] = date("Y-m-d H:i:s",filemtime($path.'/'.$file));
array_multisort($dates, SORT_DESC, $data);
if($file == "." || $file == ".." || $file == "Gestoria.php" )
continue;
// $cadena = str_replace(" ", "%20", $file);
echo reemplazar_caracteres($file);
echo '<a href='.$path.'/'.$cadena.' target="_blank">Ver</a> / ';
}
// Cerrar
closedir($dir_handle);
?>
y cuando encuentra un archivo con caracteres raros y le doy a ver, me salta un 404 o si le doy a borrar me salta un error en el código de borrar en las líneas 5 y 6.
Código PHP:
1- <?php
2- $ruta = $_GET['ruta'];
3- $archivo = $_GET['archivo'];
4- $completo = $ruta.$archivo;
5- unlink($completo);
6- header('Location: index.php');
?>
A veces me pregunto si no sería mejor escanear el nombre del archivo antes de subirlo y enviar una advertencia al usuario que modifique el nombre del mismo para evitar conflictos, no se es una idea, de todos modos estos archivos se pueden subir sólo por medio de este sistema (o por ftp) ¿qué opináis?.