Ver Mensaje Individual
  #2 (permalink)  
Antiguo 06/02/2014, 13:47
alphasierra
 
Fecha de Ingreso: octubre-2012
Ubicación: Talcahuano
Mensajes: 4
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: Problema raro con acentos en servidor local

Encontré una solución parche, pero acepto sugerencias si hay algo definitivo para resolver mi problema.

Al aplicar utf8_encode a la variable $url me dejó con algunos caracteres raros mi cadena. De esa manera averigüé cuál caracter raro corresponde a cada vocal con acento y asunto resuelto:

á = ã¡
é = ã©
í = ã*
ó = ã³
ú = ãº
ñ = ã±

Pero solo funciona con cadenas que estén completamente en minúsculas.

De esta manera el resultado final de la función quedaría así...

Código PHP:
function amigables($url) {

   
// Tranformamos todo a minusculas
   
$url strtolower($url);
                
   
// Cambiamos los caracteres especiales latinos
   
$acentos = array("á","é","í","ó","ú","ñ");
   
$normal = array("a","e","i","o","u","n");
   
$url str_replace($acentos$normal$url);
        
    
// Convierto la cadena a utf8
   
$url utf8_encode($url);
        
   
//Rememplazamos caracteres especiales
   
$especiales = array("ã¡","ã©","ã*","ã³","ãº","ã±");
   
$normal = array("a","e","i","o","u","n");
   
$url str_replace($especiales$normal$url);

   
// Ahora cambiamos algunos otros caracteres especiales y códigos por un guión
   
$find = array(' ''&''\r\n''\n''+');
   
$url str_replace ($find'-'$url);

   
// Se eliminan los siguientes caracteres que en una URL no nos interesan
   
$order = array('°','.',"'",'"',':','@','#','$','%','&','/','=','?','¡','¿','!','[',']','{','}',')','(',',');
   
$replace "";
   
$url str_replace($order$replace$url);
                
   return 
$url;

Como les dije, si alguien sabe de alguna solución definitiva agradezco los comentarios.