Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/01/2012, 13:43
Avatar de Mikimoto74
Mikimoto74
 
Fecha de Ingreso: enero-2005
Mensajes: 88
Antigüedad: 19 años, 3 meses
Puntos: 2
Problema con eliminación de acentos en caracteres

He realizado una función para convertir cadenas en segmentos SEF (para URL's amigables). El problema es que no consigo que los caracteres con acentos sean cambiados, permanecen exactamente igual. Esta es la función:

Código PHP:
function get_ruta_sef($ruta) {
        
// echo $ruta; exit;
    
$ruta mb_strtolower($ruta);
    
$ruta str_split($ruta1); // Forma rápida de convertir cadena en array
    
$ruta_final '';
    
$conversiones = array(
                    
' ' => '-',
                    
'_' => '-',
                    
'&' => '-and-',
                    
'á' => 'a',
                    
'é' => 'e',
                    
'í' => 'i',
                    
'ó' => 'o',
                    
'ú' => 'u',
                    
'ñ' => 'n',
                    
'ü' => 'u',
                    
'à' => 'a',
                    
'è' => 'e',
                    
'ì' => 'i',
                    
'ò' => 'o',
                    
'ù' => 'u',
                    
'!' => '',
                    
'º' => '',
                    
'ª' => '',
                    
'@' => '',
                    
'#' => '',
                    
'"' => '',
                    
"'" => '',
                    
'$' => '',
                    
'%' => '',
                    
'·' => '',
                    
')' => '-',
                    
'(' => '-',
                    
'=' => '',
                    
'?' => '',
                    
'¿' => '',
                    
'¡' => '',
                    
'*' => '',
                    
'`' => '',
                    
'[' => '-',
                    
']' => '-',
                    
'+' => '-',
                    
'¨' => '',
                    
'´' => '',
                    
'{' => '',
                    
'}' => '',
                    
';' => '-',
                    
',' => '-',
                    
'.' => '-',
                    
':' => '-',
                    
'¬' => '',
                    
'|' => '',
                    
'ç' => 'c',
                    
'Ç' => 'c'
                    
);
    foreach (
$ruta as $char) {
        
$ruta_final .= (array_key_exists($char$conversiones) ? $conversiones[$char] : $char);
    }
        
$ruta_final preg_replace('/[\-]{2,}/''-'$ruta_final); // agrupar guiones consecutivos en uno solo
    
return $ruta_final;

Usando esta función, la cadena "Yo innovo, tu innovas, él innova" de un título de artículo, que quiero usar como alias en una URL para su identificación, se convierte en "yo-innovo-tu-innovas-él-innova".

Como veis el acento no es cambiado, a pesar de que "é" tiene su equivalencia en "e" en el array. Lo más extraño es que si descomento el echo de la primera línea de la función, muestra la cadena tal cual tanto el navegador como el código fuente: "Yo innovo, tu innovas, él innova"
o sea, no está recibiendo caracteres extraños ni equivalencias html en vez del carácter acentuado. Vamos que es como si ignorase la sustitución de los caracteres acentuados.

Cualquier ayuda es bienvenida.