Pertama, jaga agar teks tetap logis dan bersih:
trim() -- OK
htmlentities($comment, ENT_NOQUOTES) -- No; do later
mysqli_real_escape_string() -- Yes; required by API
nl2br() -- No; see below
Logika di balik rekomendasi tersebut:Data dalam database seharusnya hanya data biasa. Bukan entitas html, bukan tag-br. Namun, Anda harus melakukan escape_string untuk meneruskan data dari PHP ke MySQL; pelarian tidak akan disimpan.
Tapi... Itu hanya langkah tengah. Dari mana data itu berasal? Versi PHP yang lebih lama mencoba untuk "melindungi" Anda dengan menambahkan pelarian dan sampah lain yang berfungsi baik untuk HTML, tetapi mengacaukan MySQL. Matikan pelarian ajaib seperti itu, dan dapatkan data mentahnya.
Ke mana datanya pergi? Mungkin HTML? Setelah SELECTing
data keluar dari tabel, lalu pertama lakukan htmlentities()
dan (opsional) nl2br()
;
Catatan, jika Anda mengharapkan untuk mempertahankan hal-hal seperti <I>
(untuk miring), Anda meminta masalah -- masalah besar. Yang perlu dilakukan peretas hanyalah <script> ...
untuk menyuntikkan segala macam keburukan ke halaman web Anda dan mungkin seluruh sistem Anda.