entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Problema codificación en un buscador interno

Hola! me surgio un problema con la codificacion:

Buscando en internet... encontre un sistema de busqueda interno... el problema surge cuando lo inserto en una web... las ñ y acentos me aparecen como ñ �...

mire varios foros y dice que cambie el charset y eso.. pero si pongo ISO-8859-1 en mi web.. me soluciona el buscador pero me cambia los acentos del resto de la pagina...y si pongo UTF-8 no me salen las ñ y los acentos en el buscador... alguna idea para solucionarlo?

Dejo el link de la pagina de pruebas para que vean el buscador...

http://frikigame.tk/index.html

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" >
<title>Buscador</title>
<div style="border:silver 1px solid;background-color:white;" >
<script language="JavaScript" src="buscar.js"></script>
<script language="JavaScript" src="db.js"></script>
<script language="JavaScript">
    initXsearch();
</script>
</div>
<body>
</body>
</head>
</html>

Yo necesito que el meta sea UTF-8 porque sino me cambia los acentos y las cosas del resto de la pagina...
es decir, solucionar solo el buscador!

Su ayuda sera de gran utilidad! Saludos

1 Respuesta

2votos

Leonardo-Tadei Puntos227320

Hola xxsserma,

tu problema está en que el archivo db.js se devuelve codificado con el juego de caracteres windows-1252, y al estar el resto de la página definida en UTF-8, se ven mal los acentos.

Podés ver la codificación invocando a http://frikigame.tk/db.js y viendo las propiedades de la página con el navegador.

Lo que tenés que hacer es conseguir que el servidor envíe db.js con el juego de caracteres UTF-8, así todo queda con la misma codificación. Tendrías que preguntarle al servicio de hosting sobre cómo hacer esto.

Alternativamente, si el servidor ejecuta PHP, podrías directamente enviar el archivo db.js codificado como UTF-8 haciendo lo siguiente:

  • Creá un archivo llamado dbjs.php
  • Poné al principio del archivo:

    <?php header('Content-type:application/javascript ; charset=utf-8'); ?>

  • Poné luego de esta línea el contenido de db.js sin cambios.
  • Cambiá la llamada al JavaScript para que sea:

...

<script language="JavaScript" src="buscar.js"></script>
<script language="JavaScript" src="dbjs.php"></script>

...

De esta forma, al transmitir le código JS diciéndole al navegador que lo interprete como UTF-8 deberías tener todo en el mismo juego de caracteres.

Por otra parte, si db.js está leyendo datos de una DB, deberías ver que los datos en la propia DB estén en UTF-8 y que la conexión con la misma también sea en UTF-8. De nada sirve tener todo el código en un juego de caracteres si luego el almacenamiento está en otro...

Adicionalmente, el código en JavaScript que generás para el buscadro está dadndo un error de "arbol desbalanceado", lo qeu significa que estás abriendo o cerrando un tag html mal. No influye en la codificación pero estaría bueno corregirlo. De paso te pregunto: por qué generás la cajita de búsqueda con document.write() en JavaScript en vez de e4scribirla directamente en HTML, que es mucho más simple y fácil de depurar???

Saludos cordiales

0voto

xxsserma comentado

La verdad solo lo baje asi como lo ves y lo quise probar para ver si funcionaba... y depues de horas de renegar para que me quedara bien en la web... me tope con que las ñ y los acentos me aparecian mal en el buscador.. .y no entendia porque... probe varias cosas que lei por ahi.. y no se solucionaba.

Con respecto a tu pregunta... ya vino asi la form en el js... por eso al principio no encontraba como modificar la caja...

0voto

Leonardo-Tadei comentado

Probá la solución que te propongo y después contanos!

0voto

xxsserma comentado

Probe tu idea de crear un archivo php pero no funciono... el buscador se sale es decir no aparece el cuadro de busqueda...
No tengo ni idea de como areglarlo.... probe tambien al script agregarle charter... pero no funciono...

0voto

xxsserma comentado

Probe tu idea de crear un archivo php pero no funciono... el buscador se sale es decir no aparece el cuadro de busqueda...
No tengo ni idea de como areglarlo.... probe tambien al script agregarle charter... pero no funciono...

0voto

Leonardo-Tadei comentado

Podrías poner el código completo de dbjs.php y de index.html para ver lo que hiciste?

0voto

xxsserma comentado

Creo que va asi el php... digame usted si esta bien o no... sino debere buscar otro sistema de busqueda o hacer una base de datos...

dbjs.php

<?php 
/* XSearch version 5.2 - Database file */

/* configuration settings */
header('Content-type:application/javascript ; charset=utf-8');  

    searchname = 'index.html'

    usebannercode=true
ButtonCode = "<button type='submit'>Buscar</button>"
    function templateBody() {
        document.write('<'+'script language="Javascript">'+'<'+'/'+'script'+'></head><body bgcolor="#ffffff" text="#000000" link="#000099" vlink="#996699" alink="#996699"><table border=0 width=640><tr><td>');
    }

    function templateEnd() {
        document.write('</td></tr></table></font></center></body></html>');
    }
    function bannerCode() {
    }   

/* end configuration settings */
/* database records */

add("<a href='http://www.google.com'>Programa para resolver problemas de matemáticas 2011</a>","prueba","esta es la pagina de gogle")
add("<a href='http://www.websoftech.tk'>WebSoftech</a>","softech","Crea aplicaciones para la web, sitios web con panel administrativo, animaciones en flash, bases de datos, TODO referente ala web")
add("<a href='http://www.facebook.com'>FACEBOOK</a>","facebook red social","UNA DE LAS MEJORES REDES SOCIALES ACTUALMENTE EN EL MUNDO")
add("<a href='http://www.taringa.net'>TARINGA</a>","taringa","RED SOCIAL EN DONDE ENCONTRAMOS DIVERSAS OPCIONES PARA NUESTRAS INQUIETUDES O DUDAS SOBRE TODO!!")

 ?>

index.html

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" >
<title>Buscador</title>
<div style="border:silver 1px solid;background-color:white;" >
<script language="JavaScript" src="buscar.js"></script>
<script language="JavaScript" src="dbjs.php"></script>
<script language="JavaScript">
    initXsearch();
</script>
</div>
<body>
</body>
</head>
</html>

Gracias por la ayuda!

0voto

Leonardo-Tadei comentado

Armaste mal el PHP, la primer línea debe ser la PHP que abre y cierra, y luego el JS tal cual:

<?php header('Content-type:application/javascript ; charset=utf-8'); ?>
/* XSearch version 5.2 - Database file */
/* configuration settings */
searchname = 'index.html'
usebannercode=true
ButtonCode = "<button type='submit'>Buscar</button>"
...

Al no cerrar el PHP, tu código da un error de interpretación y no funciona.

0voto

xxsserma comentado

ya lo cambie.. pero sige igual si corregirse las ñ y los acentos

0voto

Leonardo-Tadei comentado

Subilo a la web para verlo y envianos el enlace. El código en http://frikigame.tk/index.html sigue cargando el db.js, en vez de cargar el dbjs.php y el dbjs.php no está en el mismo directorio que el index.html

0voto

xxsserma comentado

mira lo subi en otra carpeta para probarlo

http://frikigame.tk/ee/

es el mismo nada mas que le cambie al dbjs.php como me dijiste...

0voto

Leonardo-Tadei comentado

con los cambios que te indiqué, ahora el archivo dbjs.php emite el JavaScript codificado correctamente. Podés comprobarlo apuntando a http://frikigame.tk/ee/dbjs.php y viendo la información de las cabeceras que recibe el navegador.

Lo que te está pasando es más de lo mismo en el archivo buscar.js que es el que debe tener la palabra "búsqueda" etc.

Por otra parte, además de emitir el juego de caracteres correctamente, tenés que guardar ambos archivos como UTF-8 antes de volverlos a subir: si un archivo le dice al navegador que es UTF-8 pero el contenido es otro, los caracteres se verán mal, ya que emitir una cabecera indicando el juego de caractares no transforma la codificación de los mismos.

Entonces, dos cosas: 1) poner el header PHP en buscar.js y transformarlo por ejemplo en buscarjs.php y 2) guardar ambos archivos JS codificados como UTF-8 en tu disco antes de volverlos a subir.

PD: es posible que al cambiar la codificación de caracteres de los archivos pases a verlos mal en tu propia PC. Tendrás que cambiar los caracteres que estén mal si tu editor de textos no es capaz de convertirlos.

0voto

xxsserma comentado

Gracias ya hice todo como me dijiste... si no me esquivoco los acentos ya estan... pero la Ñ aun no...
revisa ya cambie...

http://frikigame.tk/ee/

Correcion: revise otra palabra y no... sige igual

0voto

Leonardo-Tadei comentado

Ahora la codificación de los JS es correcta!

Con qué palabra estás probando?
Yo busco "hola" y los mensajes de no encontrado aparecen bien y busco google y aparece el texto y los enlaces bien.

0voto

xxsserma comentado

Con la palabra "niño" y "Papá" y aparecen los errores :l

son las caracteres especiales los que no toma...

0voto

Leonardo-Tadei comentado

Ya veo: tu problema está en que el eco que hace el código de la palabra de búsqueda vuelve mal codificado. Si te fijás en el URL los parámetros que se envían, "niño" y "Papá" se ven bien codificados.

Esto es porque el código del buscador en JavaScript está cambiado la codificación, o no la está decodificando desde el URL.

Tenés varias opciones para decodificar los caracteres recibidos vía el URL por GET:
http://www.w3schools.com/jsref/jsref_decodeuri.asp
http://stackoverflow.com/questions/3431512/javascript-equivalent-to-phps-urldecode

Para esto tenés que modificar el comportamiento del código del buscador en JavaScript, ya que quien lo escribió no pensó en caracteres acentuados o eñes... lo típico del código escrito por angloparlantes.

Para esta modificación, te sugiero analizar bien el código del buscador, de paso corregirle las cosas que tiene mal y las innecesarias y si tenés dudas, abrir una nueva pregunta específica sobre esta cuestión.

Ahora que todo el JS y el HTML llega al navegador correctamente como UTF-8, el problema ya no es de codificación, sino del propio algoritmo.

Saludos cordiales!

0voto

xxsserma comentado

Okey muchas gracias! intentare areglarlo... aver como me va..

saludos!

0voto

xxsserma comentado

Okey muchas gracias! intentare areglarlo... aver como me va..

saludos!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta