Ver Mensaje Individual
  #2 (permalink)  
Antiguo 04/07/2007, 01:18
Avatar de Escoffie
Escoffie
 
Fecha de Ingreso: abril-2003
Ubicación: Mérida, Yucatán
Mensajes: 242
Antigüedad: 21 años, 7 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