htmlentities
y htmlspecialchars
se utilizan para generar la salida HTML que se envía al navegador.
Las declaraciones preparadas se utilizan para generar/enviar consultas al motor de base de datos .
Ambos permiten el escape de datos; pero no escapan para el mismo uso.
Entonces, no, declaraciones preparadas (para consultas SQL) no le impide usar correctamente htmlspecialchars
/htmlentities
(para generación de HTML)
Acerca de strip_tags
:eliminará las etiquetas de una cadena, donde htmlspecialchars
las transformará en entidades HTML.
Esas dos funciones no hacen lo mismo; debe elegir cuál usar según sus necesidades / lo que desea obtener.
Por ejemplo, con este fragmento de código:
$str = 'this is a <strong>test</strong>';
var_dump(strip_tags($str));
var_dump(htmlspecialchars($str));
Obtendrá este tipo de resultado:
string 'this is a test' (length=14)
string 'this is a <strong>test</strong>' (length=43)
En el primer caso, sin etiqueta; en el segundo, correctamente escapadas.
Y, con una salida HTML:
$str = 'this is a <strong>test</strong>';
echo strip_tags($str);
echo '<br />';
echo htmlspecialchars($str);
Obtendrás:
this is a test
this is a <strong>test</strong>
¿Cuál de esos quieres? Eso es la pregunta importante ;-)