Foros del Web » Programando para Internet » PHP »

Problemas con Caracteres

Estas en el tema de Problemas con Caracteres en el foro de PHP en Foros del Web. Hola comunidad, espero todos se encuentren bien, bueno les comento mi inconveniente, tengo un formulario donde el usuario sube un archivo, en la extranet este ...
  #1 (permalink)  
Antiguo 12/07/2008, 19:11
Avatar de Sensorium  
Fecha de Ingreso: julio-2007
Ubicación: Montevideo-Uruguay
Mensajes: 207
Antigüedad: 16 años, 9 meses
Puntos: 7
Problemas con Caracteres

Hola comunidad, espero todos se encuentren bien, bueno les comento mi inconveniente, tengo un formulario donde el usuario sube un archivo, en la extranet este archivo se encuentra disponible para descargar, para poder forzar la descarga, manejo los headers() de PHP, hasta aquí todo bien, el problema se me presenta cuando el usuario guarda un archivo que tiene en su nombre caracteres españoles ( ñ Ñ á Á é É í Í ó Ó ú Ú ), ahi me hace cualquier cosa, por ejemplo subo un archivo que se llama "años_paso_acá.mp3", cuando intento descargarlo me pone "A�os_paso_ac�.mp3", y claro este archivo no existe, el problema es que necesito forzar la descarga, que este archivo, por ejemplo, no me abra el reproductor predeterminado en el navegador, entonces luego de probar MUCHAS cosas creo que lo mejor será remplazar los caracteres del nombre del archivo, por ejemplo que me substituya todass las coincidencias que encuentre con ( ñ Ñ á Á é É í Í ó Ó ú Ú ) por ( n N a A e E i I o O u U ), se entiende la idea?, bueno pero no tengo idea de como tratar esa cadena ?? alguna ayuda!!

les dejo el codigo que fuerza la descarga GRACIAS!!!!!
Código PHP:
<?
$archivo
=$_GET[archivo]; 
if(
file_exists($archivo))
{
$file=$archivo;   
header("Content-Transfer-Encoding: binary");   
header("Content-type: application/force-download");   
header("Content-Disposition: attachment; filename=".basename($file));   
header("Content-Length: ".filesize($file));    
readfile($file);
}
else
{
print 
"Usted esta accediendo a un archivo que no existe<br>".$archivo."<br>"
}
?>
EDITO: Estaría bueno tambien que me esa misma funcion me quite los caractres especiales (@!ºª|.....etc), se que esto se puede gacer con REGEXP pero no logro entender su funcionamiento

Última edición por Sensorium; 12/07/2008 a las 19:23
  #2 (permalink)  
Antiguo 12/07/2008, 19:33
 
Fecha de Ingreso: febrero-2006
Mensajes: 858
Antigüedad: 18 años, 2 meses
Puntos: 4
Respuesta: Problemas con Caracteres

Checate esto:
str_replace
es muy simplee...
Si no entendiste la explicacion de la pagina pues aqui te lo explico jaja:
Código PHP:
str_replace("a","b","str"); // Remplaza todas las a con b en str
//Ejemplo 
$a="abc abc";
$s=str_replace("b","i",$a);
//Resultado
$s aic aic 
Saludos ,, espero te haya servido
__________________
*La amistad se multiplica cuando se divide*
  #3 (permalink)  
Antiguo 12/07/2008, 19:44
Avatar de Sensorium  
Fecha de Ingreso: julio-2007
Ubicación: Montevideo-Uruguay
Mensajes: 207
Antigüedad: 16 años, 9 meses
Puntos: 7
Respuesta: Problemas con Caracteres

reimonfranco:
te agradezco mucho tu comentario, conozco la Funcion str_replace, pero existe un problema solo cambia un caracter por otro, y yo en mi cadena puedo tener N caracteres a cambiar, ejemplo:

"esta es una cadena que contiene ñ y tíldes, también @ y especiales como & y también #";
en esta cadena tengo que reemplazar los caracteres que estan en negrita, ya con el str_repace() se complica, un saludo grande
__________________
Artis
  #4 (permalink)  
Antiguo 12/07/2008, 23:40
Avatar de eZakto  
Fecha de Ingreso: julio-2008
Mensajes: 214
Antigüedad: 15 años, 9 meses
Puntos: 5
Respuesta: Problemas con Caracteres

No te hace falta reemplazar los caracteres, con la función urlencode() reemplaza los caracteres especiales por sus correctos equivalentes para escribir en la url y así se busque el archivo correspondiente.

Código PHP:
<?
$archivo
=$_GET[archivo]; 
if(
file_exists($archivo))
{
$file=$archivo;   
header("Content-Transfer-Encoding: binary");   
header("Content-type: application/force-download");   
header("Content-Disposition: attachment; filename=".basename($file));   
header("Content-Length: ".filesize($file));    
readfile(urlencode($file));
}
else
{
print 
"Usted esta accediendo a un archivo que no existe<br>".$archivo."<br>"
}
?>
Prueba si así te sirve ;)

Saludos.
  #5 (permalink)  
Antiguo 13/07/2008, 09:26
Avatar de Sensorium  
Fecha de Ingreso: julio-2007
Ubicación: Montevideo-Uruguay
Mensajes: 207
Antigüedad: 16 años, 9 meses
Puntos: 7
Respuesta: Problemas con Caracteres

bueno el problema esta en que la función urlencode(), si bien me muestra el nombre bien, cuando descargo el archivo, éste esta dañado y no se puede reproducir en su respectivo programa, pasa con todos los archivos, es decir me baja un archivo de pesa 0kb, yo lo había probado esto, ahora recuerdo porque fue que lo descarté!, de todos modos Muchas gracias, creo que la Historia es guardar el archivo sin caracteres especiales, explico aún mas el funcionamiento del script:
cuando realizo el upload, el script mueve el archivo a la carpeta contenedor correspondiente y guarda el nombre, que le da el usuario en un text box, o sea el nombre original del archivo se substituye por el nombre que le da el Usuario, este archivo puede ser TXT, PDF, MP3 etc.
__________________
Artis
  #6 (permalink)  
Antiguo 14/07/2008, 18:51
Avatar de Sensorium  
Fecha de Ingreso: julio-2007
Ubicación: Montevideo-Uruguay
Mensajes: 207
Antigüedad: 16 años, 9 meses
Puntos: 7
Respuesta: Problemas con Caracteres

Esta dificel verdad? nadie tiene una idea?
__________________
Artis
  #7 (permalink)  
Antiguo 15/07/2008, 01:21
Avatar de editjj  
Fecha de Ingreso: febrero-2006
Ubicación: madrid
Mensajes: 34
Antigüedad: 18 años, 2 meses
Puntos: 0
Respuesta: Problemas con Caracteres

Buenos dias,

creo que la mejor solución a tu problema es revisar los nombres antes de guardar el archivo, y guardarlo con un nombre sin caracteres especiales, para esto:

Código PHP:
$original       = array(" ""'""?""/""+""á""é""í""ó""ú""Á""É""Í""Ó""Ú""ñ""Ñ");
$sustitucion    = array("_""_""_""_""mas""a""e""i""o""u""A""E""I""O""U""n""N");
$STRING         str_replace($original$sustitucion$STRING); 
primero se crean dos arrays, con el caracter especial y su correspondencia, despues con str_replace sustituimos.

Creo que de esta forma quedará solucionado tu problema.

PD, si ya tienes información en la base de datos, te recomiendo que crees un pequeño script para modificar toda esta información de la tabla de tu base de datos.

saludos

Última edición por editjj; 15/07/2008 a las 01:23 Razón: faltaba código PHP
  #8 (permalink)  
Antiguo 15/07/2008, 06:08
Avatar de Sensorium  
Fecha de Ingreso: julio-2007
Ubicación: Montevideo-Uruguay
Mensajes: 207
Antigüedad: 16 años, 9 meses
Puntos: 7
Respuesta: Problemas con Caracteres

editjj, gracias por contestar, voy a probar esto que me propones, quizá sirva, lo voy aprobar
Gracias!
__________________
Artis
  #9 (permalink)  
Antiguo 15/07/2008, 06:19
Avatar de Sensorium  
Fecha de Ingreso: julio-2007
Ubicación: Montevideo-Uruguay
Mensajes: 207
Antigüedad: 16 años, 9 meses
Puntos: 7
Respuesta: Problemas con Caracteres

Bueno editjj, eh probado tu opción, pero no me hace nada, o sea no cambia los caracteres, creo que es porque el str_replace() no trabaja con arrays, creo que es eso..Gracias!!

Edito: Perdon, funciona perfecto, el error lo tengo yo por alguna razón no me toma el POST o sea si le escribo la cadena en el archivo que procesa lo hace bárbaro, pero si se la paso por post no me hace nada, le puse la variable para ver cuantas veces str_replace() encuentra coincidencias y me da 0 pero lo soluciono, MUCHAS GRACIAS, funciono de maravilla!
__________________
Artis

Última edición por Sensorium; 15/07/2008 a las 06:46
  #10 (permalink)  
Antiguo 15/07/2008, 06:49
Avatar de editjj  
Fecha de Ingreso: febrero-2006
Ubicación: madrid
Mensajes: 34
Antigüedad: 18 años, 2 meses
Puntos: 0
Respuesta: Problemas con Caracteres

Cita:
Iniciado por Sensorium Ver Mensaje
creo que es porque el str_replace() no trabaja con arrays, creo que es eso..Gracias!!
te paso un link sobre la utilización de str_replace()
y si trabaja con arrays. Te pongo un ejemplo completo, por si el fallo está en otro lado:

Código PHP:
<?php
// esta es la cadena que vamos a procesar
$STRING ="El idioma español o castellano es una lengua romance del grupo ibérico. Es uno de los seis idiomas oficiales de la ONU.";

// creamos los arrays con sus correspondencias
$original       = array(" ""'""?""/""+""á""é""í""ó""ú""Á""É""Í""Ó""Ú""ñ""Ñ");
$sustitucion    = array("_""_""_""_""mas""a""e""i""o""u""A""E""I""O""U""n""N");

// mostramos el resultado
echo str_replace($original$sustitucion$STRING);  
// el resultado tiene que ser
// El_idioma_espanol_o_castellano_es_una_lengua_romance_del_grupo_iberico._Es_uno_de_los_seis_idiomas_oficiales_de_la_ONU.

?>
esto funciona, está comprobado.

un saludo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:01.