Primero, mantenga el texto lógico y limpio:
trim() -- OK
htmlentities($comment, ENT_NOQUOTES) -- No; do later
mysqli_real_escape_string() -- Yes; required by API
nl2br() -- No; see below
La lógica detrás de esas recomendaciones:los datos en la base de datos deben ser simplemente datos simples. No htmlentities, no br-tags. Pero, debe hacer escape_string para pasar datos de PHP a MySQL; los escapes no serán almacenados.
Pero... Ese es sólo el paso intermedio. ¿De dónde provinieron los datos? Las versiones anteriores de PHP intentan "protegerlo" agregando escapes y otra basura que funciona bien para HTML, pero estropea MySQL. Apague ese escape mágico y obtenga los datos sin procesar.
¿A dónde van los datos? ¿Probablemente HTML? Después de SELECTing
los datos vuelven a salir de la tabla, entonces primero haz htmlentities()
y (opcionalmente) nl2br()
;
Tenga en cuenta que si espera conservar cosas como <I>
(para cursiva), está buscando problemas, grandes problemas. Todo lo que un hacker necesita hacer es <script> ...
para inyectar todo tipo de maldad en su página web y posiblemente en todo su sistema.