Código PHP:
function get_ruta_sef($ruta) {
// echo $ruta; exit;
$ruta = mb_strtolower($ruta);
$ruta = str_split($ruta, 1); // 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;
}
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.