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:
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.Ver original
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <script type="text/javascript"> $(document).ready(function(){ $("#boton").click(pulsado); }); function pulsado(){ $.ajax({ url: 'corrigePregunta2.php', dataType: 'html', type: 'POST', data: "respuesta="+$("#caja").val(), success: function(data){ $("#contenido").html(data); } }); } </script> </head> <body> <div id="page"> <input type="text" id="caja" value="películañ" /> <input type="button" id="boton" value="pulsa" /> </div> </body> </html>
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
<? include("database.php"); $db = new Database; $db->conectarse(); // Manualmente por comodidad con las pruebas $asignatura = 'ingles'; $id = 1; $respuesta = $_POST['respuesta']; $sql = "SELECT DISTINCT * FROM ".$asignatura." WHERE id = '".$id."'"; // Comprueba si la respuesta es correcta $respuestaCorrecta = $row['espanol']; if($respuesta == $respuestaCorrecta){ // Correcto $correcto = 'si'; }else{ // Mal $correcto = 'no'; } $devuelve = utf8_encode("{id: '".$id."', correcto: '".$correcto."', respuestaCorrecta: '".$respuestaCorrecta."'}"); echo $devuelve; ?>
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.