¿Cómo evitar que los datos de la base de datos rompan una página HTML?

Sé que al tomar datos de un formulario y ponerlos en una base de datos MySQL, los datos deben escaparse usando mysql_real_escape_string() para evitar inyecciones de SQL. Mi pregunta es un poco diferente.

Extraigo datos de una base de datos MySQL y luego los muestro en la página, pero tengo un problema. Supongamos que mis datos se ven así:

This is some test data, and here's a quote. For good measure, here are "some more" quotes.

Ahora, mi código php sería algo como esto:

echo '<input type="text" value="' . $data . '">';

Esto da como resultado una página HTML rota, porque los datos tienen comillas dentro y se muestran dentro de una etiqueta de entrada que abarca los datos con comillas.

¿Ves el problema?

¿Cuál es la mejor solución para esto?

preguntado el 19 de mayo de 12 a las 19:05

Use parámetros en su lugar: D y para no reinventar la rueda: vea este excelente artículo anterior de SO stackoverflow.com/questions/60174/… -

@xQbert - ¿Puedes dar más detalles? -

Ver enlace agregado al 1er comentario; pero es posible que Marc B (listo PROBABLEMENTE) haya dado en el clavo con este ejemplo específico. -

3 Respuestas

Al igual que mysql_real_escape_string() es para operaciones SQL, en el lado HTML de las cosas, es htmlspecialchars().

contestado el 19 de mayo de 12 a las 19:05

Debe escapar de los datos para las entidades html:

echo '<input type="text" value="' . htmlentities($data) . '">';

contestado el 19 de mayo de 12 a las 19:05

Puedes probar lo siguiente:

echo '<input type="text" value="' . stripslashes($data) . '">';

Mejor si puede separar su código php de su html.

<input type="text" value="<?php echo stripslashes($data);?>">

Gracias :)

contestado el 19 de mayo de 12 a las 19:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.