Ben herhangi bir HTML etiketleri kabul etmek istemiyorum. Ben en azından sayisinda strip_tags kullanmak gerektiğini düşünüyorum ()
Belki, ama insanlar sadece Küçüktür ve büyüktür demek '<' / '>' karakterleri yazın ve etiketleri ile ilgisi olmayan izin istiyorum.
Ücretsiz metin alanları için girişi gerçekten olmayan satır kontrol karakterleri (ki genellikle hiçbir yerde istemiyorum) çok daha fazla filtre, ve UTF-8 kullanıyorsanız, geçersiz / gereksiz dizileri istemeyeceksiniz .
Sonra ne zaman çıktı tabii htmlspecialchars () böylece kullanımı hatırlar geri sayfaya değer '<' < 'kaçtı ve ekranda' <', bir literal olarak görünür, doğru olur? Ne olursa olsun bu dize başka bir yerde bir form gönderme veya veritabanı veya gelen olsun, () bir şablon HTML içine bir metin değer çıktısı her zaman htmlspecialchars kullanarak gerekir.
Belirli bir yasak biçimi maç için tüm girdi istiyorum non-free-metin alanları için, o zaman evet, bir regexp bu maç için iyi bir yol olabilir.
ve addslashes ().
addslashes () hemen hemen her zaman yanlış bir şey. Dikkat etmeniz gereken bir kural şudur: Bu kullanmayın.
Bu gerçek SQL dize literal kaçış biçimi eşleşmiyor çünkü addslashes () SQL kaçan yetersiz olduğunu, bu nedenle addslashed zaman hala tehlikeli dizeleri oluşturabilirsiniz. Eğer MySQL kullanarak olduğunuzda, yerine () mysql_real_escape_string kullanmalısınız. Diğer veri tabanları kendi özel öncelemeli işlevlere sahiptir. (Eğer her SQL elle metin kaçmak zorunda kalmamak ya, kolay kullanım parameterised sorguları) bunları kullanın.
(O tüm HTML özel karakterler ile bir şey yapmak için teşebbüs etmez çünkü addslashes () HTML kaçış için yetersizdir. İşte bunun için ne değil.)
Her durumda, çıktı-kaçan giriş filtreleme aşamada başa çıkmaya çalışırken ters. Bunun yerine, düz metin olarak uygulama iç tüm dizeleri tutmak ve uygulamanın dışında onları yolda kaçmayı: Onlar bir SQL sorgusu, htmlspecialchars'dan (katılmak için dışarı gidiyoruz zaman mysql_real_escape_string) onlar gidiyoruz zaman dışında bir HTML sayfası üzerine, vb.