Foros del Web » Programando para Internet » Javascript »

Cambiar todos los acentos de una página con una funcion

Estas en el tema de Cambiar todos los acentos de una página con una funcion en el foro de Javascript en Foros del Web. Saludos: Estoy realizando una página en Esperanto. Dicho idioma tiene caracteres poco difundidos con los alfabetos tradicionales y que en ocaciones no son reconocidos si ...
  #1 (permalink)  
Antiguo 18/05/2006, 10:06
 
Fecha de Ingreso: febrero-2005
Mensajes: 135
Antigüedad: 19 años, 2 meses
Puntos: 0
Pregunta Cambiar todos los acentos de una página con una funcion

Saludos:

Estoy realizando una página en Esperanto. Dicho idioma tiene caracteres poco difundidos con los alfabetos tradicionales y que en ocaciones no son reconocidos si el navegador no tiene soporte unicode.

Por esta razón existen alternativas en el mismo idioma para escribir dichos caracteres como por ejemplo: ĉ se escribe cx, ĝ se escribe gx, etc.

Es algo parecido a los acentos en el francés.

En algunas páginas hechas en este idioma se ponen diversas maneras de mostrar la página para aquellos que no tengan la opción de ver en su computadora unicode. Pero, para esto se realizan dos versiones de la misma página en html.

Lo que deseo es poder con un script convertir al vuelo los caracteres de toda la página completa que no son reconocibles y sustituirlos por el caracteres reconocibles. ¿Me explico?

Por ejemplo el siguiente párrafo:

Ho, mia kor'! Post longa laborado
ĉu mi ne venkos en decida hor'?
Sufiĉe! trankviliĝu de l' batado,
ho, mia kor'!

Al aprentar un botón que cambie toda la página con un script a:

Ho, mia kor'! Post longa laborado
cxu mi ne venkos en decida hor'?
Suficxe! trankviligxu de l' batado,
ho, mia kor'!

Ya tengo un script que cambia lo que se escribe en una caja input de manera automática con la función onkeyup:
Código PHP:
function xAlUtf8(t) {
  if (
document.getElementById("x").checked) {
    
t.replace(/c[xX]/g"\u0109");
    
t.replace(/g[xX]/g"\u011d");
    
t.replace(/h[xX]/g"\u0125");
    
t.replace(/j[xX]/g"\u0135");
    
t.replace(/s[xX]/g"\u015d");
    
t.replace(/u[xX]/g"\u016d");
    
t.replace(/C[xX]/g"\u0108");
    
t.replace(/G[xX]/g"\u011c");
    
t.replace(/H[xX]/g"\u0124");
    
t.replace(/J[xX]/g"\u0134");
    
t.replace(/S[xX]/g"\u015c");
    
t.replace(/U[xX]/g"\u016c");
    if (
!= document.getElementById("q").value) {
      
document.getElementById("q").value t;
    }
  }
}

<
input type="text" onkeyup="xAlUtf8(this.value)" /> 
Pero necesito que se aplique a toda la página sin el input y que además puede alternar entre con acentos y sin acentos.

¿Se puede o estoy delirando?
¿Es mejor con PHP?

Gracias.
  #2 (permalink)  
Antiguo 18/05/2006, 10:15
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola yconoclasta

Te he preparado un ejemplo a ver si te sirve:
Código:
<html>
<head>
<script type="text/javascript">
function ini() {
  txt = document.body.innerHTML;
  txt = txt.replace(/á/g,'a').replace(/í/g,'i').replace(/ó/g,'o');
  document.body.innerHTML = txt;
}
</script>
</head>
<body onload="ini()">
<p>Esta página tenía acentos</p>
<p>Un camión pasó</p>
</body>
</html>
Saludos,
  #3 (permalink)  
Antiguo 18/05/2006, 10:26
 
Fecha de Ingreso: febrero-2005
Mensajes: 135
Antigüedad: 19 años, 2 meses
Puntos: 0
Uy maravilloso !!!

Benditos programadores.

Ahora voy a investigar cómo implementarlo con un boton, no en onload, para alternar de uno a otro. Similar a cuando en una página se tienen varias hojas de estilo y alternar entre ellas.

Mil gracias, si tengo más dudas vuelvo a preguntar.

Saludos.
  #4 (permalink)  
Antiguo 18/05/2006, 17:50
 
Fecha de Ingreso: febrero-2005
Mensajes: 135
Antigüedad: 19 años, 2 meses
Puntos: 0
Ya cree las funciones y están trabajando:

http://percepcionunitaria.org/eo/ver...omo_brulas.php

Ahora me gustaría saber cómo poder regresar a los cambios hechos sin recargar la página.

Aquí las funciones que escribí (para regresar al sistema unicode no me convence esto):

Código PHP:
function hsistemo() {
    
txt document.body.innerHTML;
    
txt txt.replace(/u0109/g,'ch');
    
txt txt.replace(/u011d/g,'gh');
    
txt txt.replace(/u0125/g,'hh');
    
txt txt.replace(/u0135/g,'jh');
    
txt txt.replace(/u015d/g,'sh');
    
txt txt.replace(/u016d/g,'u');
    
txt txt.replace(/u0108/g,'Ch');
    
txt txt.replace(/u011c/g,'Gh');
    
txt txt.replace(/u0124/g,'Hh');
    
txt txt.replace(/u0134/g,'Jh');
    
txt txt.replace(/u015c/g,'Sh');
    
txt txt.replace(/u016c/g,'U');
  
document.body.innerHTML txt;
}
function 
unikodo() {
    
txt document.body.innerHTML;
    
txt txt.replace(/ch/g,'\u0109');
    
txt txt.replace(/gh/g,'\u011d');
    
txt txt.replace(/hh/g,'\u0125');
    
txt txt.replace(/jh/g,'\u0135');
    
txt txt.replace(/sh/g,'\u015d');
    
txt txt.replace(/au/g,'a\u016d');
    
txt txt.replace(/Ch/g,'\u0108');
    
txt txt.replace(/Gh/g,'\u011c');
    
txt txt.replace(/Hh/g,'\u0124');
    
txt txt.replace(/Jh/g,'\u0134');
    
txt txt.replace(/Sh/g,'\u015c');
    
txt txt.replace(/aU/g,'a\u016c');
  
document.body.innerHTML txt;

De la forma que regreso a Unicode lo malo es que afecta también a uno de los estilos de la página y algunas palabras que no están en Esperanto, por ello de que no esté bien esta manera.

Gracias.
  #5 (permalink)  
Antiguo 19/05/2006, 11:14
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola de nuevo.

He modificado el código de mi anterior mensaje, pruebalo a ver si te sirve:
Código:
<html>
<head>
<script type="text/javascript">
var txt, txt2;
var activo= false;
function ini() {
  txt = document.body.innerHTML;
  txt2 = txt.replace(/á/g,'a').replace(/í/g,'i').replace(/ó/g,'o');
  document.body.innerHTML = txt2;
}
function cambia() {
  document.body.innerHTML = (activo) ? txt2 : txt;
  activo = !activo;
}
</script>
</head>
<body onload="ini()">
<p>Esta página tenía acentos</p>
<p>Un camión pasó</p>
<input type="button" value="Cambiar" onclick="cambia()" />
</body>
</html>
Saludos,
  #6 (permalink)  
Antiguo 19/05/2006, 12:05
 
Fecha de Ingreso: febrero-2005
Mensajes: 135
Antigüedad: 19 años, 2 meses
Puntos: 0
Gracias Javier B !!!

Funciona de maravilla !!

Solamente tengo una última pregunta. ¿por qué si escribo la función de la siguiente manera no funciona, pero si como tu la escribiste?

Código PHP:
function hsistemo() {
    
txt document.body.innerHTML;
    
txt2 txt.replace(/u0109/g,'ch');
    
txt2 txt.replace(/u011d/g,'gh');
    
txt2 txt.replace(/u0125/g,'hh');
    
txt2 txt.replace(/u0135/g,'jh');
    
txt2 txt.replace(/u015d/g,'sh');
    
txt2 txt.replace(/u016d/g,'u');
    
txt2 txt.replace(/u0108/g,'Ch');
    
txt2 txt.replace(/u011c/g,'Gh');
    
txt2 txt.replace(/u0124/g,'Hh');
    
txt2 txt.replace(/u0134/g,'Jh');
    
txt2 txt.replace(/u015c/g,'Sh');
    
txt2 txt.replace(/u016c/g,'U');
  
document.body.innerHTML txt2;

Y ya abusando un poco, ¿cómo podría de esta misma manera incorporar otro cambio diferente de manera reversible? Es decir poder tener un cambio de acentos para añadir una H seguida o una X seguida y que ambas sean reversibles a unicode. Osea una función más que haga otro cambio pero que a su vez sea reversible a unicode.

Mil gracias !
  #7 (permalink)  
Antiguo 19/05/2006, 12:27
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Rehola.

Fijate que estás asignando a la variable txt2 el resultado de txt.replace(/u0109/g,'ch');
A continuación vuelves a asignar a la variable txt2 el resultado de txt.replace(/u011d/g,'gh');
Al final lo que te queda en txt2 es el resultado del último cambio.

Tendrías que hacerlo así:
Código PHP:
function hsistemo() {
    
txt document.body.innerHTML;
    
txt txt.replace(/u0109/g,'ch');
    
txt txt.replace(/u011d/g,'gh');
    ...
    
txt txt.replace(/u016c/g,'U');
  
document.body.innerHTML txt;

La última parte de tu pregunta no la he entendido

Saludos,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:09.