Lo que se intenta en SQLI es manipular la consulta SQL.
Debes encerrar el valor entre comillas y escapar los caracteres especiales del contenido, de forma que no se pueda manipular la consulta. Osea si encierra el valor entre comillas, la única forma de manipular la consulta seria salir de la consulta actual y luego ingresar tu consulta SQL, pero en este caso para salir es necesario utilizar una comilla pero la comilla se escapa para que no se pueda manipular la consulta.
Muchas personas cometen este error:
<?php
mysql_query("SELECT titulo, autor, contenido FROM noticias WHERE id = ".$id);
?>
Con un
espacio puedes salir de la consulta actual y insertar otra consulta SQL. Ya que
mysql_real_escape_string(), no escapa el
espacio.
Caracteres que escapa
mysql_real_escape_stringmysql_real_escape_string() llama la función de la libreria de MySQL mysql_real_escape_string, la cual antepone backslashes a los siguientes caracteres: \x00, \n, \r, \, ', " y \x1a.
htmlspecialchars()
Ciertos caracteres tienen significados especiales en HTML, y deben ser representados por entidades HTML si se desea preservar su significado. Esta función devuelve una cadena con dichas conversiones realizadas, que por defecto son las mas habituales para la programación web. Si se requiere traducir todas las entidades HTML, se debe emplear la función htmlentities().
htmlentities()
Esta función es identica en todo a htmlspecialchars(), excepto que con htmlentities(), todos los caracteres que tengan una entidad equivalente en HTML serán cambiados a esas entidades.
Saludos.