Foros del Web » Programando para Internet » PHP »

preg_replace no hace lo que debe??

Estas en el tema de preg_replace no hace lo que debe?? en el foro de PHP en Foros del Web. He creado una función de reemplazo para quitar los acentos y demás que hace lo siguiente: Código PHP: // le paso una cadena con posibles acentos function  reemplazo ( $string ){          ...
  #1 (permalink)  
Antiguo 13/03/2008, 01:46
jane_135
Invitado
 
Mensajes: n/a
Puntos:
preg_replace no hace lo que debe??

He creado una función de reemplazo para quitar los acentos y demás que hace lo siguiente:
Código PHP:
// le paso una cadena con posibles acentos
function reemplazo($string){
        
$string_patrones '/á/,/é/,/í/,/ó/,/ú/,/ñ/,/ /';
        
$string_reemplazos 'a,e,i,o,u,n,-';
        foreach(
explode(',',$string_patrones) as $car){
            
$patrones[] = $car;
        }
        foreach(
explode(',',$string_reemplazos) as $car){
            
$reemplazos[] = $car;
        }
                
// busca acentos y los reemplaza por vocales sin acentos
        
$text preg_replace$patrones$reemplazos,strtolower(substr($text,0,80))); 
Pues resulta que no me funciona, pero si le pongo por ejemplo:

Código PHP:
        echo preg_replace$patrones$reemplazos"marrón"); 
muestra marron, por tanto lo cambia... A qué es debido??
  #2 (permalink)  
Antiguo 13/03/2008, 02:34
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 20 años
Puntos: 48
Re: preg_replace no hace lo que debe??

¿Ese es tu codigo literal? Porque el parametro de la funcion se llama $string y lo que le pasas al substr() es una variable llamada $text.
  #3 (permalink)  
Antiguo 13/03/2008, 03:42
jane_135
Invitado
 
Mensajes: n/a
Puntos:
Re: preg_replace no hace lo que debe??

tienes toda la razón, realmente es :

Código PHP:
// 

        
$text preg_replace$patrones$reemplazos,strtolower(substr($string,0,80))); 
pero a pesar de ello no funciona....
  #4 (permalink)  
Antiguo 13/03/2008, 04:03
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 20 años
Puntos: 48
Re: preg_replace no hace lo que debe??

strtolower() normalmente no pasa a minusculas los caracteres acentuados, viene en el manual la razon (un tema de LOCALE y demas).

Dependiendo de donde estes cogiendo los datos que pasas a la funcion, puede que no estes recibiendo los datos en la misma codificacion de caracteres en la que esta el fichero php, con lo que puede que el caracter ó en el fichero se represente por unos bytes distintos al caracter ó que recibes y pasas a la funcion. No son iguales a nivel binario. Es todo un lio de codificaciones de caracteres, UTF, ISO, etc. Quizas tu fichero esta en ISO, pero tu recibes el texto de una pagina codificada como UTF8.

Todo este lio de la internacionalizacion es el gran dolor de cabeza con PHP, creo que a partir de PHP6 van a facilitar la vida a los programadores.
  #5 (permalink)  
Antiguo 14/03/2008, 04:29
jane_135
Invitado
 
Mensajes: n/a
Puntos:
Re: preg_replace no hace lo que debe??

Pues sí que debe ser eso, pero no podría codificar la variable que recibo a la codificación que deseara mediante alguna función???
  #6 (permalink)  
Antiguo 14/03/2008, 06:32
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 20 años
Puntos: 48
Re: preg_replace no hace lo que debe??

Tienes utf8_decode() y utf8_encode() para pasar de utf8 a ISO y viceversa. Mira en php.net los comentarios de esas funciones, puede que encuentres alguien que ha solucionado un problema parecido.
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 21:14.