• 08-05-2010, 10:16:03
    #1
    merhaba arkadaşlar. bbcode'u HTML'e dönüştürmek için aşağıdaki gibi bir fonksiyonum var:

    function bbtohtml($gelen) {
    
    $gelen = preg_replace("/\[B\](.*?)\[\/B\]/i", "<b>$1</b>", $gelen);
    $gelen = preg_replace("/\[I\](.*?)\[\/U\]/i", "<i>$1</i>", $gelen);
    $gelen = preg_replace("/\[U\](.*?)\[\/U\]/i", "<u>$1</u>", $gelen);
    $gelen = preg_replace("/\[QUOTE\](.*?)\[\/QUOTE\]/i", "$1", $gelen);
    $gelen = preg_replace("/\[CODE\](.*?)\[\/CODE\]/i", "$1", $gelen);
    $gelen = preg_replace("/\[PHP\](.*?)\[\/PHP\]/i", "$1", $gelen);
    $gelen = preg_replace("/\[HTML\](.*?)\[\/HTML\]/i", "$1", $gelen);
    $gelen = preg_replace("/\[IMG\](.*?)\[\/IMG\]/i", "<img src=\"$1\" border=\"0\">", $gelen);
    $gelen = preg_replace("/\[LEFT\](.*?)\[\/LEFT\]/i", "<div align=\"left\">$1</div>", $gelen);
    $gelen = preg_replace("/\[CENTER\](.*?)\[\/CENTER\]/i", "<div align=\"center\">$1</div>", $gelen);
    $gelen = preg_replace("/\[RIGHT\](.*?)\[\/RIGHT\]/i", "<div align=\"right\">$1</div>", $gelen);
    $gelen = preg_replace("/\[URL=\"(.*?)\"\](.*?)\[\/URL\]/i", "<a href=\"$1\" target=\"_blank\">$2</a>", $gelen);
    $gelen = preg_replace("/\[URL\](.*?)\[\/URL\]/i", "<a href=\"$1\" target=\"_blank\">$1</a>", $gelen);
    
    return $gelen;
    }
    bu fonksiyon ile

    Alıntı
    [ B ]asd[ / B ]
    gibi kodları çözebiliyorum. ancak

    Alıntı
    [ CENTER ][ B ]asd[ / B ][ / CENTER ]
    gibi, yani iç içe 1'den fazla replace isteyen kodları çözemiyorum. bunun bir yolu var mıdır?
  • 08-05-2010, 11:20:47
    #2
    Üyeliği durduruldu
    http://elouai.com/bb2html.php.txt şöyle standart hazır birşey var
  • 08-05-2010, 11:26:00
    #3
    Verdiğin kod aslında sorunsuz şelilde çalışıyor Fakat şuan sadece regexp tek satır üzerinde çalışır. Yani $gelen değişkeni birden fazla satır içeriyorsa, birinci satırda [ B ], ikinci satırda [ /B ] bulunursa bunları görmezden gelicektir. Bu yüzden tek eksiği regex de Us değiştiricilerinide eklemen. Yani kod şöyle olacak

    $gelen = preg_replace("/\[B\](.*?)\[\/B\]/Usi", "<b>$1</b>", $gelen);
    BHCoder adlı üyeden alıntı: mesajı görüntüle
    http://elouai.com/bb2html.php.txt şöyle standart hazır birşey var
    @BHcoder yanlış anlama sadece bunun eksik yanını söylüyorum.
    Bu kod çalışır fakat eksik bir yanı var. Kelimeleri sadece replace ederek çalışıyor bu sistem. Bu yüzden bir tag kapatılmaz ise, replace işleminde kapatma işlemi gerçekleşmeyeceğinden dolayı hatalara sebep olacaktır. Yani örnek verecek olursak;

    [ CENTER ][ B ] deneme yazısı [ /B]
    Görüldüğü gibi CENTER komutu kapatılmadı. Bunun çıktısı aynen şu şekilde olacaktır.

    <div align="center"><b>deneme yazısı</b>