Limpiar acentos, enies y caracteres extranos en php

Funcion que limpia caracteres con acentos y otros simbolos extraños.

function limpiar_acentos($s)
{
$s = ereg_replace(”[áàâãª]”,”a”,$s);
$s = ereg_replace(”[ÁÀÂÃ]”,”A”,$s);
$s = ereg_replace(”[ÍÌÎ]”,”I”,$s);
$s = ereg_replace(”[íìî]”,”i”,$s);
$s = ereg_replace(”[éèê]”,”e”,$s);
$s = ereg_replace(”[ÉÈÊ]”,”E”,$s);
$s = ereg_replace(”[óòôõº]”,”o”,$s);
$s = ereg_replace(”[ÓÒÔÕ]”,”O”,$s);
$s = ereg_replace(”[úùû]”,”u”,$s);
$s = ereg_replace(”[ÚÙÛ]”,”U”,$s);
$s = str_replace(”ç”,”c”,$s);
$s = str_replace(”Ç”,”C”,$s);
$s = str_replace(”[ñ]”,”n”,$s);
$s = str_replace(”[Ñ]”,”N”,$s);

return $s;
}

21 Responses to “Limpiar acentos, enies y caracteres extranos en php”

  1. Kuma Says:

    Crreo que haces más con la función html_entities

  2. blog Says:

    Con html_entities, obtenes el codigo html para ese caracter, pero si vos queres por ejemplo, crear un directorio con o renombrar una imagen, no te sirve. Para ello necesitamos reemplazar el caracter por otro.

  3. Kuma Says:

    jaja con lo que te digo tambien se puede

  4. blog Says:

    si… poder se puede, el tema es que despues vas a tener problemas cuando quieras armar links con archivos/carpetas donde algunos caracteres hayan sido reemplazados por su entidad html. La funcion html_entities fue pensada para facilitar el armado de html dinamico, no para la manipulacion de archivos.

  5. Kuma Says:

    Mhhmm, sos un programador demasiado estructurado para mi gusto, a veces no podes utilizar metodos por su funcion y por el cual esta creado, a veces tenes limitaciones y tendrias que ser capaz de resolver el problema sin esa “comodidad” que te dan ciertos metodos “abreviados”. Hay una materia en la UBA de la carrera ciencias de la computacion que es libre y podes ir como oyente si te interesa, te hablan sobre eliminar al tipico programador que solo hace lo que lee y te impulsan a investigar… cualquier cosa decime y te digo mas

  6. blog Says:

    No es cuestion de ser estructurado o de comodidad , es cuestion de encontrar la solucion al problema. Si php me de la herramienta para encarar el problema, mejor. En este caso no podia , por ello tuve que buscar una solucion alternativa. Pero otra cosa muy distinta seria implementar una solucion que no resuelve el problema, como en el caso de llamar a la funcion html_entities.

  7. Kuma Says:

    No tiene nada que ver una cosa con la otra. Tu tópico es “Limpiar acentos, enies y caracteres extranos en php” y te digo que con html_entities se puede hacer. No entiendo que tendrá que ver armar links con carpetas si es solo para borrar caracteres. El problema que planteaste en tu post, puede ser resulto con html entities, entonces, el problema esta resuelto, la solución existe, cumplí como programador, ya funciona.

  8. blog Says:

    Mucho tiene que ver, lo que hace htmlentities, es… devolverte el codigo html de los carecteres. Si vos procesas el nombre de una imagen con acento, esa funcion te va a devolver el nombre de la imagen, incluyendo el codigo html del caracter con acento, desde el vamos no vas a poder crear un directorio (sin escaparle) con el carecter “&”, en el caso que lo escapemos con \, si necesito generar un xml para armar un listado de imagenes… va a tirar un error… del xml, a no ser que devuelva el valor unicode del caracter ‘&’, lo cual, ya necesitaria de varios parseos mas.
    Uno: Para remplazar cada carecter por su equvalente en unicode.
    Dos: Para que el programa que parsea el xml haga un callback para obtener el valor original… lo que desde ya es una locura, porque si alguna imagen tiene descripcion o un titulo, y en el mismo se encuentra el caracter ‘&’, generariamos un error de lectura.

  9. Kuma Says:

    Sigue sin tener que ver una cosa con la otra. Igualmente se nota que escribiste mucho para demostrar conocimiento.

    —————————————————–
    # Kuma Says:
    Junio 18th, 2006 at 1:47 am

    jaja con lo que te digo tambien se puede

    # blog Says:
    Junio 18th, 2006 at 5:17 pm

    si… poder se puede
    ———————————————————

  10. blog Says:

    Lee la explicacion

  11. Kuma Says:

    Que onda che
    Deberias cerrar los comentarios en tus post sino queres opiniones diferentes o mejor aún, no hace un blog
    chau

  12. blog Says:

    Las opiniones diferentes, no molestan, al contrario, son bienvenidas, siempre que esten bien fundamentadas.
    Con mis post anteriores trate de que veas mi punto de vista, si lees lo que te puse, me vas a dar la razon.
    Un Saludo!

  13. Anerko Says:

    Necesitas que te den la razón?
    con eso serias feliz?

  14. blog Says:

    No necesito que me la den, porque ya la tengo.

  15. Alejandro Says:

    Siempre salta que estudia en la UBA y quiere aplicar algo que le dijeron en una materia a todas las cosas de la vida. El post es claro, te da información, si vos tenes una manera mejor de hacer las cosas, hacete un Blog, no veo que necesidad tenés de estar en este.

  16. UpAdRiAn Says:

    Llegué aqui buscando la solución al tema de acentos en archivos q se suben a el servidor.
    Si bien la solucion sale al paso, hay q buscar la forma de parsear los caracteres de forma automatica sin incluir los acentos en el script php. Me pasó que al hacer la funcion, muy parecida a la de arriba, después de un tiempo me encontré con q al bajar el archivo desde el servidor y abrirlo me había cambiado estos caracteeres por “cuadraditos”, con lo cual no creo q funcione. Debe haber alguna manera de usar los codigos ascii para q los caracteres se mantengan el el rango seguro para usarlos como nombres de archivo.
    Si alguien delucida este método, por favor avise!!!

    Por cierto, saludos desde Uruguay!!!

  17. Brenda Says:

    Hola:

    Buscando una solución al problema de sustituir acentos y otros caracteres para nombrar un archivo y guardarlo al disco, caí en este blog.

    Veo que traen una discusión muy acalorada, pero si me lo permites, blog, me parece que Kuma tiene mucha razón.

    Puedes hacer la sustitución en muchas menos líneas que las que planteas si utilizas htmlentities.

    La magia está en primero usar htmlentities para convertir los caracteres extendidos (i.e. acentos y tildes , etc) y luego sustituyes los caracteres ‘&’ y demás.

    $string = htmlentities($stringToModify)
    $string = preg_replace(”/\&(.)[^;]*;/”, “\\1″, $string);

    Y esta línea nada más para los espacios
    $string = preg_replace(”/[ ]/”, “_”, $string);

    (Código cortesía de Guillaume Beaulieu en php.net)

    En mi experiencia de programador, más vale ahorrarte 14 líneas en las que estás recorre y recorre el mismo string para buscar coincidencias.

    Reciban todos un abrazo fraternal.

  18. victor Says:

    Estimados:

    Creo entender el punto de blog. Acabo de hacer una prueba, usé htmlentities para eliminar los acentos en el nombre de archivo que voy a subir al servidor mediante un programa pero el nombre de archivo quedó como archivo víctor guzmán.txt que claramente no me sirve como nombre de archivo. La función htmlentities está interesante pero no para todos los usos.

  19. victor Says:

    a todo esto que extraño que se origine una discusión por el solo hecho que blog hizo una propuesta para facilitarle la vida a quien desee utilizar su solución… la mención de htmlentities fue muy interesante… pero de ahí a discutir… como dicen por ahí es mejor sumar que restar y multiplicar que dividir (me refiero a las personas, espero que esto no origine una discusión matemática)

  20. TEAM MEDIA TOOLS Says:

    Saben a mi no me función el tema de htmlentities pero si la funcion limpiar_acentos. Necesitaba ganaran una URL para mejorar SEO sin acentos y ahora gracias a limpiar_acentos () si puedo.

    Grax.
    TEAM MEDIA TOOLS

  21. TEAM MEDIA TOOLS Says:

    no es q escriba tan mal, solo parece q fue muy rapido, jeje…

Leave a Reply