La tua domanda è una bella raccolta di confusioni. Sei riuscito a confondere tutto
Proviamo a risolverlo.
Utilizzando PHP, qual è il modo migliore per memorizzare caratteri speciali (come i seguenti) in un database MSQUL, per evitare iniezioni.
Questi sono argomenti incomparabili. La memorizzazione di caratteri speciali è una questione ed evitare le iniezioni è un'altra. completamente diverso.
$book_text=htmlentities($book_text, "ENT_QUOTES");
questa è la parte più divertente. sebbene sia inteso a proteggere le tue query, in realtà non fa nulla. Perché invece di costante ENT_QUOTES quale valore è 3 stai usando la stringa ENT_QUOTES quale valore numerico è 0, quindi non stai impostando alcun flag.
Ma anche se si imposta questo flag correttamente, non ti proteggerà automaticamente. Perché un codice di iniezione non può contenere caratteri speciali.
Per evitare iniezioni, è necessario seguire l'intera serie , non una semplice funzione "make_my_data_safe()". Non c'è bacchetta magica.
Vedere this my answer per i dettagli.
Per quanto riguarda i caratteri speciali, è semplice. L'unico problema è che non ci sono caratteri speciali solidi impostati. Ci sono diversi caratteri speciali per i diversi ambienti.
- 'hanno un significato per il database e HTML
- <> hanno un significato per l'HTML solo
- é à u ha senso solo per il codice HTML, dipende dalla codifica.
avete utilizzato diverse regole di formattazione per ogni caso. Diverso, non uno solo per tutti.
per utilizzare i caratteri in formato HTML con HTML è necessario impostare l'intestazione HTTP corretta. per usare é à ù con il database devi impostare la codifica della tabella in utf8 e la codifica della connessione in utf 8.
fonte
2012-04-12 05:23:11
utf8 è tuo amico –
Il '" ENT_QUOTES "' deve essere 'ENT_QUOTES' (senza virgolette) perché è una costante predefinita PHP. E ho pensato che è possibile posizionarlo in modo raw nel DB e quando vuoi farlo eco usi 'htmlentities' –