Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/11/2009, 12:07
nayade1984
 
Fecha de Ingreso: noviembre-2009
Mensajes: 3
Antigüedad: 14 años, 5 meses
Puntos: 0
caracteres %0d%0a en el nombre de un archivo

Buenas tardes, tengo un problema con un script que envía un enlace de un archivo por correo electrónico.

El script lo que hace es coger un archivo, cambiar el formato del nombre para eliminar caracteres especiales, subirlo al servidor y enviar un mail con el enlace, el problema es que en el enlace algunas veces aparecen los caracteres %0d%0a en el nombre del archivo, esto se interpreta como un intro en el navegador y el enlace falla.

Explico un poco el código que tengo:
Esta es la función que limpia los carateres especiales:

Código PHP:
function LimpiaEspacios($CadenaConMuchosEspacios)
{
$CadenaConMuchosEspaciosstrtolower($CadenaConMuchosEspacios); //pasa a minusculas

$CadenaConMuchosEspaciostrim($CadenaConMuchosEspacios); //eliminamos todos los espacios que estan antes y despues de la cadena

$CadenaReguladaereg_replace"[^a-z0-9_.]"""$CadenaConMuchosEspacios);
return 
$CadenaRegulada;

Código que sube el archivo:

Código PHP:
//recoge el contenido de los input file - una linea por cada archivo
$archivo $_FILES["archivo"]["name"];
$archivo_sin_espacios LimpiaEspacios($archivo);

//comprueba si se ha añadido archivo
if($archivo!=""){
//define ruta de destino
$destino 'archivos/'.$archivo_sin_espacios;

//sube el archivo al directorio /archivos
copy($_FILES["archivo"]["tmp_name"], $destino);

//variable para mostrar el nombre de los archivos adjuntos 
$adjuntos .= $archivo_sin_espacios;

}
else 
$destino=""
Código que muestra el enlace del archivo (esto es una parte de lo que se enviará por mail)

Código PHP:
if ($adjuntos!="") {
    
$_SESSION["foot"] .= "<br><b>Adjunto:</b> <a href='descarga.php?id=".$adjuntos."' target='_blank'><b>".$adjuntos."</b></a>";
    } 
Lo que me parece raro es que en el href aparezcan los caracteres %0d%0a y en el nombre no, cuando es la misma variable ($adjuntos) sin ninguna operación intermedia. Por ejemplo muestra el nombre archivoadjunto.doc pero al hacer clic busca el nombre archivoad%0d%0ajunto.doc y falla.

Agradecería cualquier sugerencia.
Muchas gracias. Saludos