Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] funcion limpiar caracteres especiales

Estas en el tema de funcion limpiar caracteres especiales en el foro de PHP en Foros del Web. Buenas a todos!! Estoy tratando de utilizar una funcion para limpiar un texto de caracteres especiales, para si poder formar una url amigable. la funcion ...
  #1 (permalink)  
Antiguo 23/11/2015, 17:39
Avatar de pampa_  
Fecha de Ingreso: mayo-2006
Mensajes: 334
Antigüedad: 18 años, 6 meses
Puntos: 1
funcion limpiar caracteres especiales

Buenas a todos!!

Estoy tratando de utilizar una funcion para limpiar un texto de caracteres especiales, para si poder formar una url amigable.
la funcion es:
Código PHP:
Ver original
  1. function urls_amigables($url) {
  2.     $url = utf8_decode($url);
  3.     $url = mb_strtolower($url);
  4.      
  5.      //Reemplazamos caracteres especiales latinos
  6.      $find = array('á','é','í','ó','ú','à','è','ì','ò','ù','ä','ö','ç','ñ');
  7.      $repl = array('a','e','i','o','u','a','e','i','o','u','a','o','c','n');
  8.      $url = str_replace($find, $repl, $url);
  9.      
  10.      //Añadimos los guiones
  11.      $find = array(' ', '&', '\r\n', '\n','+');
  12.      $url = str_replace($find, '-', $url);
  13.      
  14.      //Eliminamos y Reemplazamos los demas caracteres especiales
  15.      $find = array('/[^a-z0-9\-<>]/', '/[\-]+/', '/<{^>*>/');
  16.      $repl = array('', '-', '');
  17.      $url = preg_replace($find, $repl, $url);
  18.    
  19.     return $url;
  20.    
  21. }

Recurro a vosotros porque no lo consigo, lo que me hace ahora es eliminarme las letras con acento, ñ, etc... en vez de cambiarlas... creo que el problema viene por la codificacion...

En mi base de datos Mysql tengo puesto en el cotejamiento del los campos.
utf8_unicode_ci

En el notepad++ estoy con
UTF sin BOM

Y en los archivos php
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


¿Me podéis echar un cable?

Gracias.
  #2 (permalink)  
Antiguo 23/11/2015, 17:43
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: funcion limpiar caracteres especiales

¿Tienes la certeza de que la siguiente linea es realmente necesaria?

Código PHP:
Ver original
  1. $url = utf8_decode($url);

Es decir, si dices tener toda tu codificación estable y usando utf-8 ¿para que volver a decodificar el texto si ya está en utf-8?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 24/11/2015, 02:34
Avatar de pampa_  
Fecha de Ingreso: mayo-2006
Mensajes: 334
Antigüedad: 18 años, 6 meses
Puntos: 1
Respuesta: funcion limpiar caracteres especiales

Tienes razón, esa línea fue para hacer una prueba... porque antes estaba todo mal, en la base de datos era latin, los archivos .php estaban como ANSI...

Entonces hice esa prueba, imaginemos que no esta esa línea, por todo lo que cuento en el primer mensaje ¿me debería funcionar?

Muchas Gracias pateketrueke por contestar.
  #4 (permalink)  
Antiguo 24/11/2015, 17:30
Avatar de pampa_  
Fecha de Ingreso: mayo-2006
Mensajes: 334
Antigüedad: 18 años, 6 meses
Puntos: 1
Respuesta: funcion limpiar caracteres especiales

Buenas Noches!!

Ya lo he podido solucionar!!!

He pintado la variable para poder seguirla y hace cosas muy raras... lo bueno es que en el .htaccess si pones esta linea:
AddDefaultCharset utf-8

Ya podia ver como me escribe la ñ.... y con el siguiente cambio ya me lo termina de solucionar.

El problema era el mb_strtolower he tenido que ponerle
Código PHP:
Ver original
  1. $url = mb_strtolower($url,"UTF-8");

He probado quitando AddDefaultCharset utf-8 y tambien lo hace bien, solo que en la variable te pinta caracteres raros, luego con la funcion de limpiar caracteres de las miles que hay lo deja todo ok!!

Saludos!

Etiquetas: caracteres, especiales, funcion, html, limpiar, mysql
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:37.