Guvenli html içerik fonksiyonu PHP
Saturday, March 28, 2009 2:43Html input lar için temizleme fonksiyonu daha test etmedım ama hos gozukuor
copyright: http://www.ysfkc.com/dosyalar/guvenliHtml.phps
function guvenliHtml ($metin) {
global $baslangic;
$konumK = 0; # < (Kucuktur) karakterinin goruldugu son konum
$konumB = 0; # > (Buyuktur) karakterinin goruldugu son konum
$tag_mi = False; # tag icerisinde miyiz?
$ozellikSablon = ”; # ozellik=deger formatindaki aramalar icin kullanilacak global
$tagTablosu = array(); # tag bilgilerinin yer alacagi global
$ozellikTablosu = array(); # ozellik (attribute) bilgilerinin yer alacagi global
$degerTablosu = array(); # deger (value) bilgilerinin yer alacagi global
# global degiskenlerin degerlerini set et
guvenliGlobal();
# metni islemeden once yapilan on duzeltme islemi
$metin = onDuzeltme($metin);
$i = 0;
$buffer = ”;
$konumK = strpos($metin, ‘<', $i); # < karakterinin rastlandigi ilk konum
$konumB = strpos($metin, '>‘, $i); # > karakterinin rastlandigi ilk konum
# metin icindeki tag’lari tara
while (True) {
# eger < karakterine daha once rastlandiysa
# veya < karakteri bulundu ama > karakteri bulunamadiysa
if (($konumK !== False && $konumK < $konumB) || ($konumK !== False && $konumB === False)) {
#tag icerisindeysek
if ($tag_mi) {
# tag icinde < olamayacagi icin tag sandigimiz kismin
# basindaki < karakterini < ifadesine cevir
$buffer .= '<' . substr($metin, $i, $konumK - $i);
# tag icerisinde degilsek
} else {
#
$buffer .= substr($metin, $i, $konumK - $i);
}
$i = $konumK + 1;
$konumK = strpos($metin, '<', $i);
# tag baslat
$tag_mi = True;
# eger > karakterine daha once rastlandiysa
# veya > karakteri bulundu ama < karakteri bulunamadiysa
} elseif (($konumB !== false && $konumK > $konumB) || ($konumK === False && $konumB !== False)) {
# tag icerisindeysek
if ($tag_mi) {
# duzeltilmis tag’i ekle
$buffer .= guvenliTag(substr($metin, $i, $konumB – $i));
# tag’i kapat
$tag_mi = False;
# tag icerisinde degilsek
} else {
# buraya kodar olan kismi al
# ve > karakterini > ifadesine cevir
$buffer .= substr($metin, $i, $konumB – $i) . ‘>’;
}
$i = $konumB +1;
$konumB = strpos($metin, ‘>’, $i);
# eger < veya > karakterine rastlanmadiysa
} else {
# tag icerisindeysek
if ($tag_mi) {
# son rastlanan < karakterini < ifadesine cevir
# ve metnin devamini buffer'a ekle
$buffer .= '<' . substr($metin, $i);
} else {
# son kalinan konumdan itibaren metnin devamini buffer'a ekle
$buffer .= substr($metin, $i);
}
# artik tag kalmadigina gore donguden cik
break;
}
}
return $buffer;
}
# --------------------------------------------------------------------------------------------------
function onDuzeltme($metin) {
$degisiklikOncesi = '';
# degistirilmesi gereken bolum oldugu surece devam et
while ($degisiklikOncesi != $metin) {
$degisiklikOncesi = $metin;
# x formatinda yazilmis bazi karakterler, ASCII karsiliklarina cevriliyor
# bazi tag'lar ve icerikleri atiliyor
$metin = preg_replace('//si’, ”, $metin);
$metin = preg_replace(’/
$metin = preg_replace(’/








































