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;
}
June 7th, 2006 at 11:30 am
Crreo que haces más con la función html_entities
June 7th, 2006 at 1:57 pm
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.
June 18th, 2006 at 1:47 am
jaja con lo que te digo tambien se puede
June 18th, 2006 at 5:17 pm
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.
June 22nd, 2006 at 1:57 pm
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
June 22nd, 2006 at 2:26 pm
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.
June 22nd, 2006 at 2:38 pm
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.
June 22nd, 2006 at 3:21 pm
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.
June 22nd, 2006 at 3:39 pm
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
———————————————————
June 22nd, 2006 at 3:49 pm
Lee la explicacion
June 22nd, 2006 at 4:07 pm
Que onda che
Deberias cerrar los comentarios en tus post sino queres opiniones diferentes o mejor aún, no hace un blog
chau
June 22nd, 2006 at 5:01 pm
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!
June 24th, 2006 at 10:12 am
Necesitas que te den la razón?
con eso serias feliz?
June 24th, 2006 at 2:16 pm
No necesito que me la den, porque ya la tengo.
July 2nd, 2006 at 3:27 pm
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.
July 24th, 2006 at 2:00 pm
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!!!
July 27th, 2006 at 10:54 pm
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.
June 23rd, 2007 at 3:07 pm
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.
June 23rd, 2007 at 3:15 pm
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)
October 30th, 2007 at 11:47 pm
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
October 30th, 2007 at 11:49 pm
no es q escriba tan mal, solo parece q fue muy rapido, jeje…