Çiğ olarak veritabanında metin tutmanın doğru fikri var. Tüm HTML varlık şeyler için ne olduğundan emin değil; Eğer bir veritabanı ekleme için yapıyor olması gerekmez.
Eğer form gönderme girdi Š
gibi karakter başvuruları alıyorsanız bulursanız [ben veritabanı için varlık-decode gelen girişine deneyebilirsiniz neden aklınıza tek nedeni olacaktır. Bu oluyor eğer kullanıcı formu ile sayfa tarafından kullanılan kodlama yoktur karakterleri girmek, bunun nedeni bu. Kodlamanın Bu form daha sonra kullanıcı yazarak Š
ve tam anlamıyla yazarak ayırt edemez çünkü tamamen sahte olduğunu Š
! Mümkün olan her karakter bu kodlama uyuyor gibi, tüm sayfalar ve içerik için UTF-8 kodlamasını kullanarak bu kaçınmalısınız.]
Lütfen komut dizeleri hep hayır kaçması ile ham metin olmalıdır. Yani düz metin olmayan bir bağlam içine onları çıkış zamana kadar onlara bir şey yapmıyoruz demektir. SQL dize içine koyarak Yani:
$category= trim($_POST['category']);
mysql_query("SELECT * FROM things WHERE category='".mysql_real_escape_string($category)."'");
(Veya elle kaçmak zorunda kalmamak için Parametrelenmiş sorguları kullanın.) HTML içine içerik koyarak zaman:
<input type="text" name="category" value="<?php echo htmlspecialchars($category); ?>" />
(Eğer gibi kısa bir adla bir yardımcı işlevi tanımlayabilirsiniz function h($s) { echo htmlspecialchars($s, ENT_QUOTES); }
Eğer şablonları yapmak zorunda yazarak miktarını azaltmak istiyorsanız.)
Ve ... bu oldukça fazla bulunuyor. Zaten ham dizeleri konum olarak, veritabanı çıkıp dizeleri işlemek gerekmez. Eğer yapmak istediğiniz herhangi bir uygulama-özel alan doğrulama dışındaki giriş dizeleri (*), işlemek gerekmez.
*: Iyi, magic_quotes_gpc
Sen stripslashes()
get / post / cookie kanattan gelen her şeyi, ya da benim tercih seçeneği, sadece gerek yok ya, bu durumda açıksa hariç hemen başarısız:
if (get_magic_quotes_gpc())
die(
'Magic quotes are turned on. They are utterly bogus and no-one should use them. '.
'Turn them off, you idiot, or I refuse to run. So there!'
);