Hold først teksten logisk og ren:
trim() -- OK
htmlentities($comment, ENT_NOQUOTES) -- No; do later
mysqli_real_escape_string() -- Yes; required by API
nl2br() -- No; see below
Logikken bag disse anbefalinger:Dataene i databasen skal blot være almindelige data. Ikke htmlentities, ikke br-tags. Men du skal gøre escape_string for at overføre data fra PHP til MySQL; escapes vil ikke blive gemt.
Men... Det er kun det midterste skridt. Hvor kom dataene fra? Ældre versioner af PHP forsøger at "beskytte" dig ved at tilføje escapes og andet skrammel, der fungerer OK til HTML, men skruer op for MySQL. Slå sådan magisk escape fra, og få de rå data.
Hvor går data hen? Sandsynligvis HTML? Efter SELECTing
dataene ud af tabellen, så Gør først htmlentities()
og (valgfrit) nl2br()
;
Bemærk, hvis du forventer at bevare ting som <I>
(til kursiv), du beder om problemer -- store problemer. Alt hvad en hacker skal gøre er <script> ...
at injicere al slags grimhed i din webside og muligvis hele dit system.