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

[solucionado] Caracteres extraños, base de datos

Estas en el tema de [solucionado] Caracteres extraños, base de datos en el foro de Frameworks JS en Foros del Web. Muy buenas a todos. Tras un rato que llevo rallado con un problema, finalmente decido preguntar aquí a ver si logro solucionarlo. El caso es ...
  #1 (permalink)  
Antiguo 14/01/2010, 11:54
 
Fecha de Ingreso: noviembre-2008
Mensajes: 24
Antigüedad: 15 años, 5 meses
Puntos: 0
[solucionado] Caracteres extraños, base de datos

Muy buenas a todos. Tras un rato que llevo rallado con un problema, finalmente decido preguntar aquí a ver si logro solucionarlo. El caso es el siguiente.

Estoy desarrollando una aplicación web en la que el usuario responde unas preguntas, y la aplicación compara la respuesta dada con una almacenada en la base de datos, básicamente. Más o menos esta parte ya está, salvo por el tema de los caracteres extraños.

Muchas palabras contienen tildes y otros signos de puntuación. Estoy usando AJAX para recibir y enviar todo (preguntas y respuestas) con la librería jQuery, y PHP en el lado del servidor. En lo que respecta a mostrar los caracteres en la página ya lo tengo solucionado (no sin un rato también mareado). Ahora el problema me viene en la parte en que evalúa la respuesta del usuario.

El procedimiento de esto es: el usuario escribe lo que sea. Este valor se envía, junto a otros, a una página PHP mediante POST. Ésta identifica la pregunta (por el valor id que se pasa), y obtiene la información de la base de datos de la fila correspondiente. Evalúa si la respuesta dada es igual a la que figura en la base de datos, y según devuelve una cosa u otra (sí o no).

El caso es que, cuando la palabra contiene estos caracteres, siempre me da la respuesta como errónea. Pongo un código de ejemplo con el que estoy haciendo las pruebas:

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  4. <title>Prueba</title>
  5. <script type="text/javascript" src="../../iAsk/cJS/jquery.js"></script>
  6. <script type="text/javascript">
  7. $(document).ready(function(){
  8.     $("#boton").click(pulsado);
  9. });
  10.  
  11. function pulsado(){
  12.     $.ajax({
  13.            url: 'corrigePregunta2.php',
  14.            dataType: 'html',
  15.            type: 'POST',
  16.            data: "respuesta="+$("#caja").val(),
  17.            success: function(data){
  18.                $("#contenido").html(data);
  19.            }
  20.            });
  21. }
  22. </head>
  23.     <div id="page">
  24.         <input type="text" id="caja" value="películañ" />
  25.         <input type="button" id="boton" value="pulsa" />
  26.         <div id="contenido"></div>
  27.     </div>
  28. </body>
  29. </html>
La respuesta se escribe en el input 'caja', y se evalúa al pulsar el botón 'boton'. Le pongo la respuesta en value="películañ" por comodidad, pero da lo mismo si las escribo yo.
En la base de datos, la correspondiente respuesta está escrita "películañ" (sin comillas). A la hora de mostrarlo en la página lo soluciono pasando la cadena por utf8_encode(), en php.

Y el código PHP que evalúa la respuesta es:
Código PHP:
Ver original
  1. <?
  2. include("database.php");
  3. $db = new Database;
  4. $db->conectarse();
  5. // Manualmente por comodidad con las pruebas
  6. $asignatura = 'ingles';
  7. $id = 1;
  8.  
  9. $respuesta = $_POST['respuesta'];
  10. $sql = "SELECT DISTINCT * FROM ".$asignatura." WHERE id = '".$id."'";
  11. $result = mysql_query($sql,$db->link);
  12. $row = mysql_fetch_array($result);
  13.  
  14. // Comprueba si la respuesta es correcta
  15. $respuestaCorrecta = $row['espanol'];
  16. if($respuesta == $respuestaCorrecta){
  17.     // Correcto
  18.     $correcto = 'si';
  19. }else{
  20.     // Mal
  21.     $correcto = 'no';
  22. }
  23.  
  24. $devuelve = utf8_encode("{id: '".$id."', correcto: '".$correcto."', respuestaCorrecta: '".$respuestaCorrecta."'}");
  25. echo $devuelve;
  26. ?>

No sé si el fallo está en lo que envía el usuario o en lo que recoge de la base de datos, pero por lo que parece no es igual. He estado toqueteando varias cosas y no me ha funcionado.

A ver si alguien puede decirme cómo manejar los datos para que se evalúe la respuesta correctamente.

Última edición por sloy; 15/01/2010 a las 09:55
  #2 (permalink)  
Antiguo 14/01/2010, 19:09
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 14 años, 5 meses
Puntos: 65
Respuesta: Caracteres extraños, base de datos

Realmente es una biblioteca todo lo que escribiste, pero si tenes problemas con caracteres raros usa htmlentities() o html_entity_decode() o htmlspecialchars_decode() o utf8_decode()
__________________
HV Studio
Diseño y desarrollo web
  #3 (permalink)  
Antiguo 15/01/2010, 09:55
 
Fecha de Ingreso: noviembre-2008
Mensajes: 24
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Caracteres extraños, base de datos

Vaya sí, igual me extendí demasiado jeje. Intenté resumirlo lo mejor posible y aun así me quedó bastante largo.

Al final lo solucioné usando utf8_encode() en los sitios adecuados. No acabo de entender todo lo que he hecho... pero de momento funciona. Cuando tenga más tiempo reviso de nuevo el código.

Muchas gracias!

Etiquetas: ajax, caracteres, solucionado, extraño
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 13:30.