Portada | Monotemáticos | Secciones | Desarrolladores | Comunidad | Servicios | Servicios profesionales | RSS
Desde 0 | HTML | CSS | ASP | PHP | AJAX | Javascript | Diseño web | Promoción web | Ganar dinero
Directorio | Manuales | Scripts | FAQs | Programas | Artículos Copyleft | Actualidad | La Cosecha | Colabora
Registrarse | Vuestras páginas | Foros del web | Lista de correo | Boletín de novedades
Generador METAs | Compras | Busca cursos
Alojamiento | Dominios.es | Micropagos SMS | Buscadores | Patentes, marcas | Creación web | Multimedia | Videos
Desarrollo Freelance | Buscar proyectos | Buscar profesionales | Solicitar desarrollo

Arreglar error con acentos en Google Coop


El buscador personalizado de Google Coop tiene un problema con los acentos. Mostramos como solucionarlo para que el motor de búsqueda Co-op permita acentos sin dar errores.


29/2/08 - Google Coop es un buscador personalizado que ofrece Google como servicio, para incorporar en una página web un motor de búsqueda que muestra resultados en las webs que se indique. En un artículo anterior de DesarrolloWeb.com ya publicamos algunas informaciones sobre este interesante servicio: Google Co-op, tu propio buscador personalizado.

En este artículo vamos a hablar del tema de los acentos en el sistema de Google Coop, que da errores poco descriptivos que pueden hacer creer al usuario que tu página no funciona correctamente. Podéis comprobarlo por vosotros mismos, si buscamos con una palabra acentuada en DesarrolloWeb.com, que utiliza el buscador de Google Co-op, nos devuelve una página vacía. No ofrece ningún error, pero tampoco ofrece ningún resultado, por lo que puede parecer que la página no está funcionando. (En nuestro caso mostramos un error por nuestra cuenta, pero google coop no muestra nada por el solo)

El problema de los acentos es debido al juego de caracteres que estamos utilizando. En realidad, el sistema de Google Coop funciona perfectamente con los acentos, lo que pasa es que tenemos que utilizar el juego de caracteres utf-8.

Si metemos esta línea en la cabecera del html, dentro de HEAD, podremos ver como el buscador, aunque busquemos palabras con acentos, funciona correctamente:

<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />

Con ello estamos marcando que el juego de caracteres debe ser utf-8.

El problema de utilizar utf-8 es que a menudo los acentos se ven de manera incorrecta, con un carácter raro. A no ser que utilicemos caracteres especiales, los acentos que pongamos en la página se verán transformados en muchos casos a un código raro que queda muy feo. Esto también tiene que ver con el editor web que estemos utilizando y si tiene compatibilidad con el juego de caracteres UTF-8, así permitiría a los navegadores tratar bien los acentos al trabajar con UTF-8.

Está claro que todos deberíamos utilizar caracteres especiales para asegurarnos que los acentos y otros caracteres se ven correctamente en todos los casos, pero a veces, por la razón que sea, no los utilizamos. En DesarrolloWeb.com, de hecho, para no tener problemas con los acentos utilizamos el juego de caracteres ISO-8859-1. Nosotros no siempre utilizamos caracteres especiales y además la codificación de nuestros archivos de texto con código o con los manuales está en ANSI de 8 bit (un problema que arrastramos desde hace mucho tiempo y requeriría volver a codificar todas la página y revisar todos los artículos). El problema es que con el buscador Google Coop ISO-8859-1 no funciona bien y los acentos se le atragantan, y con ello se desata el problema que comentaba al principio.

Entonces ¿Qué hacer para que Google Coop funcione correctamente y que nuestra página también muestre bien los acentos? ¿Qué juego de caracteres utilizar UTF-8 o ISO-8859-1? Pues voy a contar la solución que he tomado yo, que quizás no sea la mejor y sea una simple chapuza, pero los resultados, más o menos, me parecen satisfactorios.

La en la página web en general utilizo el juego de caracteres ISO-8859-1, para lo que en la cabecera tenemos esta declaración:

<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1">

Luego, cuando muestro las páginas del buscador CO-OP, utilizo el juego de caracteres UTF-8, con la declaración META vista al comienzo del artículo. Para saber si estoy o no en una página del buscador utilizo una variable global, aunque podría haber utilizado alguna de las variables de $_SERVER. Hago algo como esto:

<?
if (isset($GLOBALS["estoy_en_buscador_google_coop"]))
   echo '<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />';
else
   echo '<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1">';
?>


En las páginas que quiero utilizar google coop declaro al comienzo una variable:

$estoy_en_buscador_google_coop=true;

De esta manera, una vez dentro del buscador ya utilizamos utf-8 y entonces cualquier búsqueda que se realice con o sin acentos dará resultados correctos.

El problema son las búsquedas realizadas desde cualquier otra de las páginas del sitio web, que tenían codificación ISO-8859-1. Entonces la cadena de búsqueda enviada al buscador con codificación ISO da problemas. Lo que hacemos, y aquí está la chapucilla, es buscar si la palabra que está buscando el usuario tiene acentos, porque entonces sabemos que Google Coop no va a dar ningún resultado. Entonces en este caso lo que hacemos nosotros es mostrar un mensaje de error informando al usuario que tenemos un problema con los acentos.

function tiene_acentos($cadena){
   $acentos = "áéíóúüÁÉÍÓÚÜñÑ";
   for ($i=0; $i<strlen($cadena); $i++){
      if (strpos($acentos, substr($cadena,$i,1))!==false)
         return true;
   }
   return false;
}

//echo "<!-- " . $_GET["q"] . "-->";

if (isset($_GET["dw"]) && tiene_acentos($_GET["q"])){
   echo "<p><br><br><i>Has intentado buscar una palabra con acentos</i></p>";
   echo "<p>Por favor, repite la búsqueda ahora para que funcione correctamente, que hemos activado la compatibilidad con acentos. O bien, prueba a realizar la búsqueda de la palabra sin acentuar.</p><br><br>";
}
?>


Como las páginas del buscador ya las estamos mostrando con UTF-8, las nuevas búsquedas que realicen los usuarios con el buscador funcionarán correctamente. Así que en el mensaje que mostramos al usuario en caso de detectar un acento, nos permitimos el lujo de decir que hemos activado la compatibilidad con acentos y que pruebe a hacer la búsqueda de nuevo, con o sin acentos, que funcionará perfectamente.

Espero que hayamos podido aclarar nuestra solución y que no sea considerada demasiado chapucera. Aceptamos comentarios.

 Seguir navegando a partir aquí:
+ 1 manual relacionado
+ 1 categoria relacionada

 Autoría, licencia y acciones sobre este artículo

Informe de Miguel Angel Alvarez*
Director de DesarrolloWeb.com

Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.

* Para consultas técnicas utilizar la lista de correo.

Versión imprimible Versión imprimible del artículo
Enviar artículo por e-mail Enviar artículo por e-mail
Añadir un comentario al artículo Publicar un comentario del artículo

Manuales relacionados con este artículo
Dentro de Taller de PHP

Categorias relacionadas
A través de las categorías de nuestro directorio se pueden encontrar otro tipo de recursos relacionados con este artículo:
+ Entrar en Scripts en PHP


 Comentarios de los visitantes
Aun no hemos recibido comentarios de este artículo.
Puedes ser el primero en enviar tu comentario.



Enlaces:
Maestrosdelweb
  Ir arriba

Manuales relacionados
+Taller de PHP
Categorías
+Scripts en PHP

Lectura recomendada

Compra este libro en Agapea, la librería urgente a domicilio.

Tienda DesarrolloWeb

DesarrolloWeb.com | Copyright | Anunciese | Acerca de | Datos legales | Contacta | Por GuiarteMultimedia