Foros del Web » Programando para Internet » PHP »

No me funciona función para quitar caracteres especiales

Estas en el tema de No me funciona función para quitar caracteres especiales en el foro de PHP en Foros del Web. Tengo está función, que limpia acentos y caracteres especiales para conventir una cadena en una URL amigable del tipo vendo-ordenador-portatil.html en vez de vendo-ordenador-portátil.html que ...
  #1 (permalink)  
Antiguo 18/07/2011, 06:59
 
Fecha de Ingreso: mayo-2010
Mensajes: 128
Antigüedad: 13 años, 10 meses
Puntos: 13
No me funciona función para quitar caracteres especiales

Tengo está función, que limpia acentos y caracteres especiales para conventir una cadena en una URL amigable del tipo vendo-ordenador-portatil.html
en vez de vendo-ordenador-portátil.html que no enlazaría bien debido al acento.
En concreto está es la función:

funciones.php
Código PHP:
<?php
function limpiar($String){
        
$String str_replace(array('á','à','â','ã','ª','ä'),"a",$String);
        
$String str_replace(array('Á','À','Â','Ã','Ä'),"A",$String);
        
$String str_replace(array('Í','Ì','Î','Ï'),"I",$String);
        
$String str_replace(array('í','ì','î','ï'),"i",$String);
        
$String str_replace(array('é','è','ê','ë'),"e",$String);
        
$String str_replace(array('É','È','Ê','Ë'),"E",$String);
        
$String str_replace(array('ó','ò','ô','õ','ö','º'),"o",$String);
        
$String str_replace(array('Ó','Ò','Ô','Õ','Ö'),"O",$String);
        
$String str_replace(array('ú','ù','û','ü'),"u",$String);
        
$String str_replace(array('Ú','Ù','Û','Ü'),"U",$String);
        
$String str_replace(array('[','^','´','`','¨','~',']'),"",$String);
        
$String str_replace("ç","c",$String);
        
$String str_replace("Ç","C",$String);
        
$String str_replace("ñ","n",$String);
        
$String str_replace("Ñ","N",$String);
        
$String str_replace("Ý","Y",$String);
        
$String str_replace("ý","y",$String);
        return 
$String;
        }
?>
La cual funciona perfectamente si se integra dentro de un archivo (index.php o el que sea), pero no si la meto en un archivo a parte y luego la llamo con un require_once o un include.

Por ejemplo:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
.
.
.
</head>
<body>
.
.
.
<?php
require_once("funciones.php") //Aqui estaría la función
$titulo="Holá";
echo $titulo;
</body>
</html>

Y saldría por pantalla Holá, en vez de Hola.
  #2 (permalink)  
Antiguo 18/07/2011, 07:01
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 18 años, 11 meses
Puntos: 394
Respuesta: No me funciona función para quitar caracteres especiales

Jeje, tienes que llamar la funcion y pasarle como parametor el string asi:


Código PHP:
Ver original
  1. $titulo="Holá";
  2. echo limpiar($titulo);
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #3 (permalink)  
Antiguo 18/07/2011, 08:08
 
Fecha de Ingreso: mayo-2010
Mensajes: 128
Antigüedad: 13 años, 10 meses
Puntos: 13
Respuesta: No me funciona función para quitar caracteres especiales

Tiene razón lo puese mal, pero tampoco funciona, sigue dejando el acento.

Lo que quería poner era:

$titulo="Holá";
$titulo=limpiar($titulo)
echo $titulo;
  #4 (permalink)  
Antiguo 18/07/2011, 08:34
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: No me funciona función para quitar caracteres especiales

Buenas,

Acabo de probar tu código y me funciona perfectamente, asegúrate de que tienes bien la llamada. Tienes la función en un archivo diferente al que la usas? Si es así, asegúrate de que está bien hecho el include, porque a mí no me da ningún problema.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #5 (permalink)  
Antiguo 18/07/2011, 10:21
 
Fecha de Ingreso: mayo-2010
Mensajes: 128
Antigüedad: 13 años, 10 meses
Puntos: 13
Respuesta: No me funciona función para quitar caracteres especiales

Pues no me funciona. Y no creo que sea por eso, porque ese archivo externo (funciones.php) está en la misma carpeta que todos los archivos restantes y alberga más funciones, las cuales al llamarlas funcionan perfectamente.
  #6 (permalink)  
Antiguo 18/07/2011, 10:23
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: No me funciona función para quitar caracteres especiales

Otra cosa que podría estar pasando es que tus scripts esten como codificación UTF-8, y en la pagina estas usando ISO, revisa que ambos archivos esten en la misma.

Saludos.
  #7 (permalink)  
Antiguo 18/07/2011, 10:28
 
Fecha de Ingreso: mayo-2010
Mensajes: 128
Antigüedad: 13 años, 10 meses
Puntos: 13
Respuesta: No me funciona función para quitar caracteres especiales

Es decir, si corto la función de "funciones.php" y la pego en el index.php o cualquier otro archivo se ejcuta perfectamente, pero al externalizarla no funciona. Y no creo que sea por el require_once (he probado con include y lo mismo), pues como digo ejecuta bien otras funciones también albergadas allí, y además si fuera por el include imprimiría un error en pantalla si estuviera mal la ruta.
  #8 (permalink)  
Antiguo 18/07/2011, 10:29
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: No me funciona función para quitar caracteres especiales

No tendrás en el mismo fichero otra función limpiar, no?
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #9 (permalink)  
Antiguo 18/07/2011, 10:29
 
Fecha de Ingreso: mayo-2010
Mensajes: 128
Antigüedad: 13 años, 10 meses
Puntos: 13
Respuesta: No me funciona función para quitar caracteres especiales

Todos los archivos los tengo así: <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>

Bueno, en los archivos de las funciones solo hay codigo php evidentemente.
  #10 (permalink)  
Antiguo 18/07/2011, 10:31
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: No me funciona función para quitar caracteres especiales

¿Pero que codificación tiene el archivo? Eso es lo más importante...
  #11 (permalink)  
Antiguo 18/07/2011, 10:33
 
Fecha de Ingreso: mayo-2010
Mensajes: 128
Antigüedad: 13 años, 10 meses
Puntos: 13
Respuesta: No me funciona función para quitar caracteres especiales

Cita:
Iniciado por vgonga1986 Ver Mensaje
No tendrás en el mismo fichero otra función limpiar, no?
He separado y puesto el codigo en funciones2.php, en el cual tengola mencionada y otra:

Código PHP:
<?php
function limpiar_especiales($s){
            
$s str_replace(array('á','à','â','ã','ª'),"a",$s);
            
$s str_replace(array('Á','À','Â','Ã'),"A",$s);
            
$s str_replace(array('Í','Ì','Î'),"I",$s);
            
$s str_replace(array('í','ì','î'),"i",$s);
            
$s str_replace(array('é','è','ê'),"e",$s);
            
$s str_replace(array('É','È','Ê'),"E",$s);
            
$s str_replace(array('ó','ò','ô','õ','º'),"o",$s);
            
$s str_replace(array('Ó','Ò','Ô','Õ'),"O",$s);
            
$s str_replace(array('ú','ù','û'),"u",$s);
            
$s str_replace(array('Ú','Ù','Û'),"U",$s);
            
$s str_replace("ç","c",$s);
            
$s str_replace("Ç","C",$s);
            
$s str_replace("[ñ]","n",$s);
            
$s str_replace("[Ñ]","N",$s);

            return 
$s;
            } 



function 
convertir_seo($string) {
   
$spacer "-";
   
$string trim($string);
   
$string strtolower($string);
   
$string trim(ereg_replace("[^ A-Za-z0-9_]"" "$string)); 
 
   
$string ereg_replace("[ \t\n\r]+""-"$string);
   
$string str_replace(" "$spacer$string);
   
$string ereg_replace("[ -]+""-"$string);
   return 
$string
}
?>
La primera es la que no funciona. estoy actualmente utilizando la otra que si funciona, que si hay acentos transformaría así:

Artículo nuevo --> Art-culo-nuevo.html

Pero sigo sin entender porque no funciona la primera, que si funcionase tras aplicar las dos debería quedar así:

Artículo nuevo --> Articulo-nuevo.html
  #12 (permalink)  
Antiguo 18/07/2011, 10:36
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: No me funciona función para quitar caracteres especiales

Es por lo que te digo, revisa la codificación del archivo, si usas Notepad++ el menu Encoding te muestra el encoding del archivo.

También no es recomendable usar ereg* esas funciones ya estan obsoletas y ahora se debe de usar preg*.

Saludos.
  #13 (permalink)  
Antiguo 18/07/2011, 10:52
 
Fecha de Ingreso: mayo-2010
Mensajes: 128
Antigüedad: 13 años, 10 meses
Puntos: 13
Respuesta: No me funciona función para quitar caracteres especiales

No tengo funciones repetidas.

Debe ser un tema del encoding como dice GatorV, que no me aclaro como va. Se supone que tiene que estar dentro del head, ¿no?

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>

Estoy usando dremweaver CS4.
  #14 (permalink)  
Antiguo 18/07/2011, 11:14
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: No me funciona función para quitar caracteres especiales

en efecto, alli tienes un problema
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>

deberia ser

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
__________________
aconcaguaestudio.com
  #15 (permalink)  
Antiguo 18/07/2011, 11:21
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: No me funciona función para quitar caracteres especiales

Descarga Notepad++ y fijate en el encoding de tu archivo, desconozco si en Dreamweaver lo puedes ver, pero si estas usando ISO, deberías de codificar tus archivos en formato ANSI.

Saludos.
  #16 (permalink)  
Antiguo 18/07/2011, 11:46
 
Fecha de Ingreso: mayo-2010
Mensajes: 128
Antigüedad: 13 años, 10 meses
Puntos: 13
Respuesta: No me funciona función para quitar caracteres especiales

Cita:
Iniciado por iviamontes Ver Mensaje
en efecto, alli tienes un problema
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>

deberia ser

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Hola, antes tenía eso (es el formato que te pone por defecto el dremweaver) y en lugar de los acentos me salía ?. Lo cambie por iso-8859-1 y se ven todos los acentos bien, aunque no había manera de quitarlos.

Cita:
Descarga Notepad++ y fijate en el encoding de tu archivo, desconozco si en Dreamweaver lo puedes ver, pero si estas usando ISO, deberías de codificar tus archivos en formato ANSI.

Saludos.
Pues gracias GatorV, he convertido a ANSI el archivo "funciones2.php" con el Notepad++ y ahora me aplica bien la función. Aunque no lo terminó de entender el caso es que funciona. ¿Habría que pasar todos los archivos a ese formato?
  #17 (permalink)  
Antiguo 18/07/2011, 11:48
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: No me funciona función para quitar caracteres especiales

Así es, tienes que mantener todos los archivos en la codificación que estes usando, no es bueno mezclar codificaciones porque pasan cosas como las que expones.

Si trabajas en UTF-8, pon todos tus archivos en ese formato, si estas usando ISO, pon todos tus archivos como ISO.

Saludos.
  #18 (permalink)  
Antiguo 18/07/2011, 11:50
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: No me funciona función para quitar caracteres especiales

claro y cuando hagas tus consultas a la BD, deberías tmb de decirle que lo harás con una codificación

mysql_query("SET NAMES 'utf-8'");
__________________
aconcaguaestudio.com
  #19 (permalink)  
Antiguo 18/07/2011, 14:36
 
Fecha de Ingreso: mayo-2010
Mensajes: 128
Antigüedad: 13 años, 10 meses
Puntos: 13
Respuesta: No me funciona función para quitar caracteres especiales

Ok, gracias. Yo los tengo en ISO y ahora se ve todo bien, incluido lo de la base de datos. En teoría ¿cual es mejor utilizar para España? Ahora tengo los datos en local, pero no se si tendría que cambiar la codificación si los vuelco a un servidor externo.
  #20 (permalink)  
Antiguo 18/07/2011, 14:38
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: No me funciona función para quitar caracteres especiales

a mi me gusta más utf8, y es la que uso en todo
archivos, BD, conexiones, etc
__________________
aconcaguaestudio.com
  #21 (permalink)  
Antiguo 18/07/2011, 14:40
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: No me funciona función para quitar caracteres especiales

Yo utilizo ISO_8859-15 o más conocida como Latin 1.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?

Etiquetas: caracteres, especiales, html, quitar
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 23:59.