Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Caracteres especiales (acentos y eñes) vs Ajax.Autocompleter

Estas en el tema de Caracteres especiales (acentos y eñes) vs Ajax.Autocompleter en el foro de Frameworks JS en Foros del Web. Hola foreros: Descripción del problema: Tengo un documento XHTML en iso-8859-1 generado por PHP, y con un input al que le aplico el Ajax.Autocompleter() del ...
  #1 (permalink)  
Antiguo 04/07/2007, 00:39
Avatar de Escoffie  
Fecha de Ingreso: abril-2003
Ubicación: Mérida, Yucatán
Mensajes: 242
Antigüedad: 21 años, 8 meses
Puntos: 9
Caracteres especiales (acentos y eñes) vs Ajax.Autocompleter

Hola foreros:

Descripción del problema:
Tengo un documento XHTML en iso-8859-1 generado por PHP, y con un input al que le aplico el Ajax.Autocompleter() del script.aculo.us.
También tengo una base de datos MySQL donde guardo nombres de países como México, Canadá, Perú, etc.

El problema es que si escribo "Méx" (con acento) no encuentra la coincidencia con "México" (que en la BD sí tiene acento). Pero si escribo "Mex" sí lo encuentra.

Ya busqué y busqué y lo único que he encontrado es que cambie el charset a utf-8 pero además de que ya lo probé y no funciona, a estas alturas del desarrollo tendría que redactar otra vez mucho texto.

Lo idea es que encuentre "México" tanto con "Mex", como con "Méx".

Cualquier cosa, se los agradeceré mucho.

Saludos.
  #2 (permalink)  
Antiguo 04/07/2007, 01:18
Avatar de Escoffie  
Fecha de Ingreso: abril-2003
Ubicación: Mérida, Yucatán
Mensajes: 242
Antigüedad: 21 años, 8 meses
Puntos: 9
Solucionado: aquí el cómo se hizo

Hola de nuevo.

Problema identificado:
El Script.aculo.us (y prácticamente todo lo que tenga que ver con AJAX) funciona con UTF-8, pero en mi base de datos MySQL el texto se almacena como Latin 1 (ISO 8891-1) de manera predeterminada.
Entonces, el dato es pasado del Ajax.Autocompleter() como UTF-8 y por eso las incongruencias.

Solución al problema descrito arriba:
  1. Usar la función de PHP utf8_decode para convertir el dato recibido por el método $_POST['parametro'] en Latin 1.
  2. Usar la función inversa utf8_encode para convertir el dato devuelto a UTF-8, y así evitar problemas con caracteres raros en el Output.
    • En lugar del punto 2 (ojo es en lugar de, no además de), se puede añadir un header("Content-Type: text/html; charset=iso-8859-1"); al principio del Script PHP.
El código XHTML+javascript:
Nota: en el HEAD del documento se deben importar los archivos prototype.js y scriptaculous.js como se describe aquí.
Código HTML:
<input type="text" name="pais_clg" id="pais_clg" value="<?php echo $rs['dato']; ?>" size="32"/>
<span id="indicator1" style="display: none">Procesando...</span>
<div id="output1" class="autorelleno"></div>
<script type="text/javascript" language="javascript">
<!--
new Ajax.Autocompleter(
            "pais_clg",
            "output1",
            "scriptQueDevuelveElValor.php",
            {
                method: "post",
                paramName: "value",
                minChars: 2,
                indicator: 'indicator1',
            });
-->
</script> 
El código PHP scriptQueDevuelveElValor.php
Código PHP:
<?php
require_once("conecta.php");
mysql_select_db($database$conexion);
$sql "
        SELECT valor 
        FROM tabla 
        WHERE valor 
        LIKE '%"
.utf8_decode($_POST['value'])."%' 
        GROUP BY valor"
;
$rs mysql_query($sql$conexion);
echo 
"<ul>";
while(
$data mysql_fetch_assoc($rs)) { 
    echo 
"<li>".stripslashes(utf8_encode($data['valor']))."</li>";
}
echo 
"</ul>";
?>
O bien...
Código PHP:
<?php
header
("Content-Type: text/html; charset=iso-8859-1");
require_once(
"conecta.php");
mysql_select_db($database$conexion);
$sql "
        SELECT valor 
        FROM tabla 
        WHERE valor 
        LIKE '%"
.utf8_decode($_POST['value'])."%' 
        GROUP BY valor"
;
$rs mysql_query($sql$conexion);
echo 
"<ul>";
while(
$data mysql_fetch_assoc($rs)) { 
    echo 
"<li>".stripslashes($data['valor'])."</li>";
}
echo 
"</ul>";
?>
Saludos y espero que les sea útil... pasé mis últimas 4 horas tratando de resolverlo
  #3 (permalink)  
Antiguo 04/07/2007, 11:01
Avatar de oabareload  
Fecha de Ingreso: junio-2006
Ubicación: Distrito Federal, México
Mensajes: 57
Antigüedad: 18 años, 5 meses
Puntos: 0
Re: Caracteres especiales (acentos y eñes) vs Ajax.Autocompleter

No se pero tal vez te sirva esta información:

http://xkr.us/articles/javascript/encode-compare/
  #4 (permalink)  
Antiguo 20/09/2007, 08:06
 
Fecha de Ingreso: septiembre-2007
Ubicación: Jersey City, NJ, USA
Mensajes: 1
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: Solucionado: aquí el cómo se hizo

Acabo de percatarme de algo interesante en relación con este tema.

Según http://www.prototypejs.org/api/ajax/options tenemos la posibilidad de poner en el parámetro 'encoding:' el valor que querramos. Podríamos decir iso-8859-1 y ya (me imagino - aún no lo he probado).

Saludos,


David
http://davidmintz.org/
  #5 (permalink)  
Antiguo 08/02/2008, 13:53
 
Fecha de Ingreso: enero-2008
Mensajes: 10
Antigüedad: 16 años, 11 meses
Puntos: 0
De acuerdo Re: Caracteres especiales (acentos y eñes) vs Ajax.Autocompleter

gracias me a servido tanto tanto utf8_decode!! millones de gracias..
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.
Tema Cerrado

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 08:56.