Foros del Web » Programando para Internet » PHP » CodeIgniter »

Reemplazar, no eliminar

Estas en el tema de Reemplazar, no eliminar en el foro de CodeIgniter en Foros del Web. Hola amigos: mi duda es la siguiente. Quiero generar urls a paratir de unos titulos de informaciones mediante el helper url y la función url_title(). ...
  #1 (permalink)  
Antiguo 30/11/2011, 07:58
Usuario no validado
 
Fecha de Ingreso: septiembre-2007
Ubicación: Cuba
Mensajes: 202
Antigüedad: 16 años, 7 meses
Puntos: 5
Pregunta Reemplazar, no eliminar

Hola amigos:
mi duda es la siguiente. Quiero generar urls a paratir de unos titulos de informaciones mediante el helper url y la función url_title(). Pero lo que sucede es que las vocales con tildes me las elimina y lo que quiero es que me las reemplace por esas mismas pero sin la tilde y las eñes (ñ) las reemplace por n y así sucesivamente. Espero me puedan ayudar. Salu2
Reyvi
Gracias
  #2 (permalink)  
Antiguo 30/11/2011, 08:50
Avatar de quike88  
Fecha de Ingreso: agosto-2008
Mensajes: 471
Antigüedad: 15 años, 8 meses
Puntos: 87
Respuesta: Reemplazar, no eliminar

Que tal,

Yo lo solucioné extendiendo el helper de esta forma.

Creas un archivo llamado my_helper_url.php dentro de tu_aplicacion/helpers/ y pones este código:
Código PHP:
<?php
function url_title($str$separator 'dash'$lowercase FALSE){
    if (
$separator == 'dash') {
        
$search        '_';
        
$replace    '-';
    } else {
        
$search        '-';
        
$replace    '_';
    }

    
$trans = array(
                
$search                 => $replace,
                
"á"                     => 'a',
                
"é"                     => 'e',
                
"í"                     => 'i',
                
"ó"                     => 'o',
                
"ú"                     => 'u',
                
"Á"                     => 'A',
                
"É"                     => 'E',
                
"Í"                     => 'I',
                
"Ó"                     => 'O',
                
"Ú"                     => 'U',
                
"ñ"                     => 'n',
                
"Ñ"                     => 'Ñ',
                
"ä"                     => 'a',
                
"ë"                     => 'e',
                
"ï"                     => 'i',
                
"ö"                     => 'o',
                
"ü"                     => 'u',
                
'&\#\d+?;'                => '',
                
'&\S+?;'                => '',
                
'\s+'                    => $replace,
                
'[^a-z0-9\-\._]'        => '',
                
$replace.'+'            => $replace,
                
$replace.'$'            => $replace,
                
'^'.$replace            => $replace,
                
'\.+$'                    => ''
               
);
    
$str strip_tags($str);

    foreach (
$trans as $key => $val)
    {
        
$str preg_replace("#".$key."#i"$val$str);
    }

    if (
$lowercase === TRUE)
    {
        
$str strtolower($str);
    }

    return 
trim(stripslashes($str));
}
Que lo que hace es reemplazar la función por una que tiene un array con las vocales con tilde y la ñ.

Saludos.
  #3 (permalink)  
Antiguo 30/11/2011, 09:42
Usuario no validado
 
Fecha de Ingreso: septiembre-2007
Ubicación: Cuba
Mensajes: 202
Antigüedad: 16 años, 7 meses
Puntos: 5
Respuesta: Reemplazar, no eliminar

Hola colega, gracias por tu respuesta, eso es lo que tenía hecho, había extendido el helper, pero lo que sucede es que me quita las vocales de las cadenas... EJ.

Código PHP:
Ver original
  1. echo url_title("Continúa debate pueblo-gobierno en asambleas de circunscripción");

Eso me debería devolver

Continua-debate-pueblo-gobierno-en-asambleas-de-circunscripcion

Ese sería el resultado ideal, pero lo que hace es que las letras con tildes las omite y las elimina de la cadena, este es el resultado que estoy obteniendo

Contina-debate-pueblo-gobierno-en-asambleas-de-circunscripcin

Fijense que la ú de Continúa y la ó circunscripción las quita de la cadena y no las reemplaza por los caracteres antes mencionados. Ayudaaaaa
  #4 (permalink)  
Antiguo 30/11/2011, 10:08
Avatar de quike88  
Fecha de Ingreso: agosto-2008
Mensajes: 471
Antigüedad: 15 años, 8 meses
Puntos: 87
Respuesta: Reemplazar, no eliminar

que tal reyvi,

Acabo de probar tu ejemplo y me funciona correctamente (no omite las vocales con tildes, las reemplaza), en verdad me parece extraño que no te funcione.

No cambiaste de casualidad el prefijo que debe tener tu archivo para extender una clase? No se me ocurre otra cosa para que no funcione.

Saludos.
  #5 (permalink)  
Antiguo 30/11/2011, 10:15
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Reemplazar, no eliminar

Otro problema puede ser el encoding, verifica que tanto los archivos como las cadenas que estas enviando tengan el encoding correcto.
  #6 (permalink)  
Antiguo 30/11/2011, 10:59
Usuario no validado
 
Fecha de Ingreso: septiembre-2007
Ubicación: Cuba
Mensajes: 202
Antigüedad: 16 años, 7 meses
Puntos: 5
Pregunta Respuesta: Reemplazar, no eliminar

Cita:
Iniciado por GatorV Ver Mensaje
Otro problema puede ser el encoding, verifica que tanto los archivos como las cadenas que estas enviando tengan el encoding correcto.
Hola GatorV
como bien mencionas, el problema radica en esto de la codificación pues le puse delante de la cadena la función utf8_decode y entonces me funcionó a la perfección. Ahhhhh y no lo puede hacer mediante la extensión del helper, hice un helper common y allí puse esta función
Código PHP:
function UrlAmigable($url) { 
    
$url strtolower($url);
    
$url trim($url);
    
$find = array('á''é''í''ó''ú''ñ','ü');
    
$repl = array('a''e''i''o''u''n','u');
    
$url str_replace ($find$repl$url);
    
$find = array(' ''&''\r\n''\n''+');
    
$url str_replace ($find'-'$url);
    
$find = array('/[^a-z0-9\-<>]/''/[\-]+/''/<[^>]*>/');
    
$repl = array('''-''');
    
$url preg_replace ($find$repl$url);
    return 
$url;
    } 
lo que hago es llamarla de esta manera
Código PHP:
<?=UrlAmigable(utf8_decode($cadena));?>
Cómo puedo solucionar esto para que todo trabaje normalmente????
Salu2
Reyvi
  #7 (permalink)  
Antiguo 30/11/2011, 11:01
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Reemplazar, no eliminar

Asegurate que todo tu sistema use la misma codificación, tanto en los archivos PHP como en los HTML y en tu BDD, todos deben de tener el mismo encoding para que funcione bien.
  #8 (permalink)  
Antiguo 30/11/2011, 14:35
Usuario no validado
 
Fecha de Ingreso: septiembre-2007
Ubicación: Cuba
Mensajes: 202
Antigüedad: 16 años, 7 meses
Puntos: 5
Respuesta: Reemplazar, no eliminar

cómo puedo serciorarme de esto?????? que todo use la misma codificación??????
  #9 (permalink)  
Antiguo 30/11/2011, 14:50
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Reemplazar, no eliminar

En los archivos, puedes usar un editor de texto que tenga ese soporte e indicarle que vas a usar ANSI o UTF8.

En tu sitio web mediante las cabeceras <meta> correctas (o desde un header en PHP).

En la base de datos depende del RDBMS pero la mayoría tienen comandos específicos para cambiar el encoding de la conexión y las tablas.

Etiquetas: reemplazar
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 13:20.