Seperti yang telah ditunjukkan orang lain, # 2 adalah jawaban yang benar. Biarkan "mentah" sampai Anda membutuhkannya, lalu keluar dengan tepat.
Untuk menjelaskan alasannya (dan saya akan mengulangi/meringkas postingan lainnya), mari kita ambil skenario 1 ke logika ekstremnya.
Apa yang terjadi ketika seseorang memasukkan " ' OR 1=1 <other SQL injection> --
". Sekarang mungkin Anda memutuskan bahwa karena Anda menggunakan SQL, Anda harus menyandikan untuk SQL (mungkin karena Anda tidak menggunakan pernyataan berparameter). Jadi sekarang Anda harus mencampur (atau memutuskan) penyandian SQL &HTML.
Tiba-tiba bos Anda memutuskan dia menginginkan keluaran XML juga. Sekarang untuk menjaga pola Anda tetap konsisten, Anda juga perlu menyandikannya.
CSV berikutnya - oh tidak! Bagaimana jika ada tanda kutip dan koma dalam teks? Lebih banyak melarikan diri!
Hei - bagaimana dengan antarmuka AJAX interaktif yang bagus? Sekarang Anda mungkin ingin mulai mengirim JSON kembali ke browser jadi sekarang {, [ dll. semua perlu dipertimbangkan. BANTUAN!!
Jadi jelas, simpan data seperti yang diberikan (tentu saja tunduk pada batasan domain) dan enkode sesuai dengan output Anda pada saat Anda membutuhkannya . Keluaran Anda tidak sama dengan data Anda.
Saya harap jawaban ini tidak terlalu menggurui. Kredit untuk responden lain.