Cuando trabajamos con cadenas con acentos, eñes y otros símbolos no compatibles en ciertos entornos, en ocasiones, hemos de sustituirlas por sus equivalentes para poder ofrecer el resultado deseado (por ejemplo, sustituir á por a).
En PHP este problema es bastante frecuente y encima, se ve agravado porque funciones como strstr tienen problemas cuando trabajamos con codificaciones como UTF-8. Os traigo una función que os permitirá atajar este problema, os la dejo a continuación:
<?php function normaliza ($cadena){ $originales = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ ßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ'; $modificadas = 'aaaaaaaceeeeiiiidnoooooouuuuy bsaaaaaaaceeeeiiiidnoooooouuuyybyRr'; $cadena = utf8_decode($cadena); $cadena = strtr($cadena, utf8_decode($originales), $modificadas); $cadena = strtolower($cadena); return utf8_encode($cadena); } ?>
Si queréis agregar más caracteres a convertir, sólo tenéis que introducirlos al final de los vectores: originales y modificadas; en su misma posición.
https://www.youtube.com/embed/z-xGk9c_eOw Guionista y locutor: Manuel Ignacio López Quintero.Fecha de publicación: 31 de diciembre de 2024.
Ver comentarios
y si cambiamos eso por algo mas facil
ejemplo:
$charset='ISO-8859-1'; // o 'UTF-8'
$str = iconv($charset, 'ASCII//TRANSLIT', $str);
:)
Diego,
Gracias por tu método, no conocía la función iconv() y la verdad que es genial su uso.
Ya decía yo que tenía que existir algo así por parte de la tecnología.
Y no te olvides de quitar luego todos los acentos de la transliteración.
$nuevo = preg_replace("/[^A-Za-z0-9 ]/", '', $str);
Eres una máquina ! ;-) Pero para que funcione realmente bien y no sustituya los caracteres
especiales por símbolos de interrogación primero hay que utilizar
setlocale:
setlocale(LC_ALL, 'en_US.UTF8');
Entonces la máquina eres tú. Yo realmente ni siquiera hice la prueba sólo dejé el comentario. Un poco vaguete la verdad ;)
jejeje par de máqunas :-P
Oh que bonito. Yo el iconv si lo he usado pero no me dí cuenta. Las mejores soluciones siempre son las más simples.
Gracias @e7ab7600568448277ddffe1386de0737:disqus tu solución funciona y es mucho más sencilla de implementar
Cuando te las has visto putas convirtiendo desde un "packed javascript" en unicode a UTF8 ya nada te sorprende.
Internet está plagado de funciones ultra-cargadas con más de 10!! líneas. KISS por favor.
Muy acertado Diego ;)
hi my friend... can you post the PHP + HTML code in a zip file??? i´m a newbie of php.. thanks!
Gonzalo, lo siento pero sólo cuelgo eso por cuestión de tiempo :(
Pues a mí sólo me funciona el original, dentro de un plugin de WordPress.
No me funciona iconv
Tienes que instalar iconv en tu equipo, no tiene por qué venir instalado con PHP por defecto.
En el caso de gente que no pueda instalar componentes de PHP, siempre se puede usar la solución inicial del post con los comentarios que le siguen sobre los acentos y carácteres especiales. Siempre mejor intentar instalar iconv pidiendolo al proveedor. A veces lo hacen.
funciona a la perfeccion, gracias
Excelente tu funcion le agrege el caracter ' por un espacio, me funciono de maravillas, he probado iconv y otras funciones y ninguna me ayudo a lo que yo buscaba. Gracias.
Gracias <3