
HtmlSpecialChars isimli fonksiyonun kullanımını inceleyelim. Fonksiyonun tanımını görmek için php.net ten manuelden htmlspecialchars fonksiyonuna erişiyorum Fonksiyonun adını yazıp ara dediğimde Metin Fonksiyonlarının içinde ilgili fonksiyonu buluyorum. İşlev olarak baktığımda özel karakterleri html entites yani html formlarına dönderiyor.Php4 ve php5 te kullanabildiğimi ve parametre olarak ilk parametre metin ifadesini İkinci parametrede ön tanımlı tip ENT_COMPAT olmak üzere dönüşüme tipini vererek daha sonra double_encode dediğimiz parametreyi verip işlemi tamamlıyorum.
Bu diğer parametrelerin opsiyonel olduğunu düşünürsek bizim için en önemli ve tek parametre metni vermektir.
Dönüşümlerde şunları gerçekleştirir html olarak mesala bir input un içine value eşittir diyerek değerini yazdırdığımızı düşünelim Bunun içerisinde And işareti, (&) Çift Tırnak (") , Tek tırnak ('), Büyüktür (>) Küçüktür (<) bizim açımızdan sakınca oluşturur. İşte bu sakıncalı karakteleri & için & Çift tırnak için " Tek tırnak için ' Küçüktür işareti için < Büyüktür işareti için ise > e dönüştürmemiz gerekir. Bu dönüştürme işleminde parametreleri vererek dönüştürmeyi gerçekleştirebiliriz.
Burda baktığımızda ifadenin sadece ENT_COMPAT olarak verdiğimizde Çift tırnağı dönüştürdüğünü tek tırnağı değiştirmediğini görüyoruz. Zaten mantık olarak biz bu işlemi yaptığımızda XHTML standartlarına göre değerleri eşittir diyerek çift tırnak içerisinde yazıyorsak problem olmayacaktır.
İkisinin dönüştürülmesini istiyorsak ama default quota style i ENT_QUOTES şeklinde vermemiz gerekir.
Manuelden kullanımına baktıktan sonra bir php sayfası oluşturup ne işe yaradığını detaylı şekilde görmüş olalım. php sayfamı oluşturup açtıktan sonra
Şimdi amacımız şu şekilde. buraya bir input type text şeklinde html nesne koyduğumuzu düşünelim. value eşittir diyerek bunun burda yer alması gereken metin değerini veriyorduk.
İlk başta hiç bir sakıncalı karekter olmadan buraya bir metin yazdıralım ve sayfamızı çağıralım. Sayfamızı çağırdığımızda normal ifadenin yazıldığını görüyoruz. Peki biz burda çift tırnak yazdırsaydık. Buraya yazdırmamız gereken ifade bu şekilde olsaydı sayfayı yenilediğimizde çift tırnağın çıkmadığını görüyoruz. Çünkü bu oluşturduğumuz çift tırnağı ilk çift tırnağın kapanışı olarak değerlendirir.
Bu anlamda burda anlamsız bir çift tırnak oluşmuş olur.Aynı şekilde büyüktür küçüktür işaretleri ondan sonra and işareti yine burda yazdığım ifadeyi bozucu karakterlerdir. Mesela burda çift tırnak büyüktür yazdırmak isteseydik
<input type="text" value="selam<">&"" />
Bu durumda tag kapandığı için bu durumda bunu takip eden ifadeler anlamsız hale gelmiş olur.Bundan dolayı biz formumuzda bir değeri yazdırırken burdaki sakıncalı karakterleri replace etmemiz tek tek yada htmlspecialchars fonksiyonunu kullanmamız gerekir.
İfademizin şöyle olduğunu düşünelim ve values kısmında php taglarını açıp kapadıktan sonra metin ifademizi yazdırdığımızı düşünelim bu şekilde fonksiyonu çağırdığımızda bozulduğunu görüyoruz. İşte burdaki işaretlerin yerine az önce bahsettiğimiz şekilde ya bul değiştir yapmamız yada php de bize hali hazırda gelen htmlspecialchar fonksiyonunu kullanmamız yeterli olur.
Tüm sakıncalı karekterleri burada sıraladık ve sayfamı tekrar çağırıyorum Görüyorum ki yazdırdığım karakterler sorunsuz bir şekilde buraya gelmiş oluyor.
<?php
$metin = 'selam<">&"';
?>
<input type="text" value="<?php echo htmlspecialchars($metin);?>" />
Bu mantıkla aslında formda gösterdiğimiz tüm metinsel ifadelerde htmlspecialchars fonksiyonu kullanmamız gerekir. Aynı şekilde buraya bir textarea koyuyorsak Burda metin ifademizi yazdırdığımız kısımda ki bu iki tağın arasında olması gerek htmlspecialchars fonksiyonunu kesinlikle kullanmalıyız.
<?php
$metin = 'selam<">&"';
?>
<input type="text" value="<?php echo htmlspecialchars($metin);?>" />
<textarea><?php echo htmlspecialchars($metin);?></textarea>
Gördüğünüz üzere textarea nın içine yazılan karakterlerde sorunsuz bir şekilde görüldüğünü görüyoruz. Bu mantıkla formda tüm value yazdırdığımız değerlerde htmlspecialchars kullanmamız gerekir. Htmlspecialchars fonksiyonu kullanmalıyız bu fonksiyonunda genel kullanımı bu şekildedir. Bir diziye bu fonksiyonu uygulamak istiyorsanız mesela $_GET veya $_POST la gelen bir veriye bunu uygulamak istiyorsanız array_map fonskiyonundan faydalanarak array_map ('htmlspecialchars',$_POST) dediğinizde tek boyutlu olduğunu düşünürsek yani formunuzda çoklu boyutlu bir postlama oluşturmadıysanız Bu satır sizin tüm post dizinizdeki elemanlara otomatik olarak htmlspecialchars fonksiyonunu uygulayacak Bundan dolayıda aşağı kısımlarda kullanırken bu şekilde fonksiyonu çağırmanıza gerek kalmayacaktır.
<?php
$_POST = array_map('htmlspecialchars',$_POST);
$metin = 'selam<">&"';
?>
<input type="text" value="<?php echo $metin;?>" />
<textarea><?php echo htmlspecialchars($metin);?></textarea>
htmlspecialchars da bilmemiz gereken genel kullanımlar bu şekilde