Su pregunta es una buena colección de confusiones. Usted logró confundir todo.
Tratemos de solucionarlo.
Usando PHP, ¿cuál es la mejor manera de almacenar caracteres especiales (como el siguiente) en una base de datos MSQUL, para evitar inyecciones?
Estas son cuestiones incomparables. El almacenamiento de caracteres especiales es una cuestión y evitar las inyecciones es otro. completamente diferente.
$book_text=htmlentities($book_text, "ENT_QUOTES");
esto es lo más divertido. aunque está destinado a proteger sus consultas, en realidad no hace nada. Porque en lugar de constantes ENT_QUOTES cuyo valor es 3, está utilizando la cadena ENT_QUOTES cuyo valor numérico es 0, por lo tanto, no está configurando ningún indicador.
Pero incluso si configura este indicador correctamente, no lo protegerá automáticamente. Porque un código de inyección puede no contener caracteres especiales.
Para evitar las inyecciones, debe seguir todo el conjunto de reglas , no una función simple "make_my_data_safe()". No hay varita mágica
Ver this my answer para los detalles.
En cuanto a los specialchars, es simple. El único problema es que NO hay conjuntos de caracteres especiales sólidos. Hay diferentes caracteres especiales para los diferentes entornos.
- 'tienen significado para la base de datos y HTML
- <> han significado para el HTML solamente
- e A u tiene un significado para sólo el HTML, depende de la codificación.
tiene que utilizar diferentes reglas de formato para cada caso. Diferente, ni uno solo para todos.
para usar caracteres à HTML con HTML, debe establecer el encabezado HTTP adecuado. para utilizar el correo de U con la base de datos que tiene que fijar su tabla de codificación UTF-8 a la codificación y la conexión a UTF 8.
UTF-8 es su amigo –
Los ' "ENT_QUOTES"' 'tiene que ser ENT_QUOTES' (sin comillas) porque es una constante predefinida PHP. ¿Y pensé que puedes colocarlo en bruto en el DB y cuando quieres repetirlo usas 'htmlentities' –