Foros del Web » Programando para Internet » PHP »

eliminar caracteres raros en nombres de fotos

Estas en el tema de eliminar caracteres raros en nombres de fotos en el foro de PHP en Foros del Web. Tengo un uploader de imagenes bastante bien terminado. Pero aun no consigo resolver un tema. Se trata de renombrar las fotos con caracteres extraños. Los ...
  #1 (permalink)  
Antiguo 20/09/2009, 14:05
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
eliminar caracteres raros en nombres de fotos

Tengo un uploader de imagenes bastante bien terminado. Pero aun no consigo resolver un tema.

Se trata de renombrar las fotos con caracteres extraños.

Los usuarios segun veo se bajan las imagenes con nombres aleatorios, y no las renombran ellos mismos antes de subirlas.

Esto:

0048fhdsjfl_dfjsklsdf.safjdlk?jflsd&fdjlks_fhg-dsf.jpg

A veces da problemas. Tengo que escribir uno por uno los caracteres que serian problematicos y reemplazarlos por algo amigable como un _? O hay alguna funcion para limpiar los nombres?
  #2 (permalink)  
Antiguo 20/09/2009, 14:27
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: eliminar caracteres raros en nombres de fotos

str_ireplace
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 20/09/2009, 16:03
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: eliminar caracteres raros en nombres de fotos

Cita:
str_ireplace
Es decir que tengo que listar todos los caracteres raros que se me ocurran y reemplazarlos.

A veces veo posts donde se reemplazan acentos y demas, pero no cubren todas las posibilidades, como puntos y parentesis, o &.
  #4 (permalink)  
Antiguo 20/09/2009, 21:04
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: eliminar caracteres raros en nombres de fotos

O puedes crear tu propio nombre, usando rename. O cuando lo ingreses puedes colocarle algun nombre especifico.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 22/09/2009, 20:01
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: eliminar caracteres raros en nombres de fotos

Estaba implementando esta funcion, que dice "reemplaza todos los caracteres salvo las letras, los numeros y los guiones bajos".

Cita:
ereg_replace("[^A-Za-zñÑ_áéíóú.0-9]", "", $nombre);
Yo queria sumar el guion medio para que no lo tome en cuenta al reemplazar todo lo demas. Pero en el manual php aparece que ereg_replace esta DEPRECATED para 5.3 y php6 .

Que usar entonces para expresiones regulares? preg_replace?

Y como admito el guion del medio? Intente escaparlo asi: /- pero me lo reemplaza igual.
  #6 (permalink)  
Antiguo 22/09/2009, 20:08
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: eliminar caracteres raros en nombres de fotos

Tal vez te sirva esta funcion que hice para URLs amigables sef_string() y los pasos serian:

1- Quitas la extension del archivo: str_replace('.jpg', '', $archivo);
2- Limpias el nombre y agregas nuevamente la extension: $archivo = sef_string($archivo) . '.jpg';

Lo de la extension es porque la funcion elimina todo lo que no sean letras, numeros y guiones, incluyendo los puntos.
__________________
- León, Guanajuato
- GV-Foto
  #7 (permalink)  
Antiguo 22/09/2009, 20:11
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: eliminar caracteres raros en nombres de fotos

Si, @Triby, me sirve. Y ya casi logro hacer una que funcione igual.

preg_replace entonces es lo que buscaba. Gracias.

Lo que me queda es no solo conservar letras y numeros sino tambien guiones altos y bajos. Me ayudas?

Cita:
// Eliminar todo lo que no sea letras, numeros o espacios y eliminar espacios dobles
$str = preg_replace("/[^a-zA-Z0-9\s]/", "", $str);
$str = preg_replace('/\s\s+/', ' ', $str);
Esta es tu funcion. Que agregamos?

EDITADO _---


Basandome en tu funcion, esto funcionó:

Cita:
$str = preg_replace("/[^a-zA-Z\_\-\.0-9]/", "", $str );

Última edición por mayid; 22/09/2009 a las 20:17
  #8 (permalink)  
Antiguo 22/09/2009, 20:20
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: eliminar caracteres raros en nombres de fotos

En esa funcion, como es para URLs amigables, conservo los espacios para reemplazarlos por guiones, entonces, en la expresion:

Elimina \s que corresponde a los espacios
Agrega: \- (guion medio, necesita estar escapado) y _ (guion bajo)

Código php:
Ver original
  1. $str = preg_replace("/[^a-zA-Z0-9\-_]/", "", $str);

La segunda linea ya no es necesaria porque cambia espacios multiples a 1 solo, pero ya se eliminan todos con la modificacion.
__________________
- León, Guanajuato
- GV-Foto
  #9 (permalink)  
Antiguo 22/09/2009, 20:22
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Esto funciona:

Cita:
preg_replace("/[^a-zA-Z\_\-0-9]/", "", $nombre);
Estoy probando esto:

Cita:
// Convertir acentos y tildes
$search = array('.', 'Á', 'É', 'Í', 'Ó', 'Ú', 'á', 'é', 'í', 'ó', 'ú', 'Ü', 'ü', 'Ñ', 'ñ');
$replace = array('_', 'a', 'e', 'i', 'o', 'u', 'a', 'e', 'i', 'o', 'u', 'u', 'u', 'n', 'n');
$nombre = str_replace($search, $replace, strtolower(trim($nombre)));
Y al parecer me transforma el punto. Pero no la á acentuada.

Y en el manual de PHP encontré esto:
Cita:
// replace accented chars
$accents = '/&([A-Za-z]{1,2})(grave|acute|circ|cedil|uml|lig);/';
para un preg_replace. Pruebo.

Esto funcionó:

Cita:
$nombre= utf8_encode(strtr(utf8_decode($nombre), '.áéíóuÁÉÍÓÚÜñÑ' , '_aeiouAEIOUunn'));
Era un problema de UTF-8

Última edición por GatorV; 23/09/2009 a las 09:59
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 22:14.