Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

PHP i BBcode, problematicno ispisivanje

[es] :: PHP :: PHP i BBcode, problematicno ispisivanje

[ Pregleda: 655 | Odgovora: 7 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

BodaTajson
Novi Sad

Član broj: 72752
Poruke: 18
*.dynamic.sbb.co.yu.



Profil

icon PHP i BBcode, problematicno ispisivanje17.02.2007. u 20:20
Da izlozim problem :)

iz baze phpbb foruma ovako iscitavam jedan post

Code:

$sqlUpitSR="SELECT post_text FROM phpbb_posts_text WHERE post_id=7525";
$podaciSR=mysql_fetch_array($sr);


a zatim ga ispisujem na stranici pomocu:
Code:
<?=$podaciSR["post_text"]?>



problem je sto tekst koji bi treba da izgleda ovako >>



blablabla.

petak 16. februar
Blablablabla.




dobijem u ovom obliku >>


[i:69f56c80cf]blablabla.[/i:69f56c80cf][b:69f56c80cf]petak 16. februar[/b:69f56c80cf]Blablabla.



da li drugacije citati te podatke iz baze? mysql_fetch_...? ustvari, kako restiti problem? :)


17.02.2007. u 20:20 

Nemanja Avramović
PHP developer, Webinsane
Mladenovac, Srbija

Moderator
Član broj: 32202
Poruke: 3912
194.106.174.*

ICQ: 266136396
Sajt: www.avramovic.info


Profil

icon Re: PHP i BBcode, problematicno ispisivanje17.02.2007. u 21:23
Pa pravi problem je u tome što su podaci verovatno u bazi upisani kao "[i:69f56c80cf]blablabla.[/i:69f56c80cf][b:69f56c80cf]petak 16. februar[/b:69f56c80cf]Blablabla."

Nađi način da ukloniš/izparsiraš taj bbcode
Moj sajt. Moj blog. Moj avatar. Moj grad. Moja frizura.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
17.02.2007. u 21:23 

BodaTajson
Novi Sad

Član broj: 72752
Poruke: 18
*.dynamic.sbb.co.yu.



Profil

icon Re: PHP i BBcode, problematicno ispisivanje18.02.2007. u 11:05
Pokusao sam nesto i delimicno uspeo. Posto je bold predstavljen [b:69f56c80cf] i [/b:69f56c80cf] stavio sam ta dva elementa u niz. Zatim pretrazivanjem mog teksta, umesto njih redom ispisuje clanove drugog niza gde sam stavio <span style="font-weight:bold"> i </span>. To radi ok dok ne editujem post na forumu jer pri svakom editovanju tog posta onaj broj 69f56c80... se promeni.

Sad pokusavam da rasclanim na 4 clana, s tim da su drugi i cetvrti promenljivi i da njih hocu da zamenim sa praznim stringom tj. ' '

[b: 69f56c80cf] [/b: 69f56c80cf]

Kako da odradim pretragu teksta tj. kako da posle [b: pretrazim tekst do prvog ] znaka. Moze li se 69f56c80cf] predstaviti kao *.] ili nesto slicno?

evo kako tacno izgleda:

Code:

<?php
    include "connect.php";
    $sqlUpitSR="SELECT post_text FROM phpbb_posts_text WHERE post_id=7525";
    $sqlUpitCG="SELECT post_text FROM phpbb_posts_text WHERE post_id=7477";
    if (!$sr=mysql_query($sqlUpitSR) OR !$cg=mysql_query($sqlUpitCG)) {
        echo "Podaci nisu dostupni" . mysql_error();
        die();
    }
    $podaciSR=mysql_fetch_array($sr);
    $podaciCG=mysql_fetch_array($cg);
        
    function Parse($bbcode) { 
        $bbc_a=array('[b:69f56c80cf]','[/b:69f56c80cf]');                       //
        $bbc_b=array('<br><span style="font-weight:bold">','</span>');   //
        $bbc_num=count($bbc_a); 
        $loop=0; 
        while($loop<$bbc_num) { 
            $bbcode=str_replace($bbc_a[$loop], $bbc_b[$loop], $bbcode); 
            $loop++; 
        } 
        return $bbcode; 
    }
    
    $podaciSR=Parse($podaciSR);
    $podaciCG=Parse($podaciCG);
?>



Pomagajte :)
18.02.2007. u 11:05 

Nemanja Avramović
PHP developer, Webinsane
Mladenovac, Srbija

Moderator
Član broj: 32202
Poruke: 3912
194.106.174.*

ICQ: 266136396
Sajt: www.avramovic.info


Profil

icon Re: PHP i BBcode, problematicno ispisivanje18.02.2007. u 11:24
Pa može preko regularnih izraza. Najlakše:
Code:
preg_match_all('/[b:(.*)](.*)[\/b:(.*)]/',$bbcode,$matches);
print_r($matches);


Nisam probao ali ovo bi trebalo da vrši posao. Verovatno (ne verovatno nego sigurno) ovaj regularni izraz može preciznije da se definiše ali ja sam totalni početnik kad su regularni izrazi u pitanju
Moj sajt. Moj blog. Moj avatar. Moj grad. Moja frizura.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
18.02.2007. u 11:24 

BodaTajson
Novi Sad

Član broj: 72752
Poruke: 18
*.dynamic.sbb.co.yu.



Profil

icon Re: PHP i BBcode, problematicno ispisivanje19.02.2007. u 13:03
ne mogu da se snadjem sa ovom sintaksom :(

[b:69f56c80cf] i [/b:69f56c80cf]

bitno mi je da je posle ovog prvog aktivan bold, a posle drugog da nije. Ne bih da npr. citam teskt izmedju njih pa ga ispisem vec bi da ga sacuvam formatiranog.



tekst ulazi u ovom obliku:

obican_tekst[b:69f56c80cf]ovde_treba_boldovano[/b:69f56c80cf]normalan_tekst...



Ovim pokusavam ali dobijam nepromenjen izlaz. Mozes li da mi kazes sta konkretno ne valja u $bbc_a? Sama funkcija radi tj. zameni stringove iz $bbc_a stringovima iz $bbc_b. Ako stavim $bbc_a=array('[b:69f56c80cf]','[/b:69f56c80cf]') odradice zamenu ali ovako nece >>

Code:

    function Parse($bbcode) {
        $bbc_a=array('/[b:(.*)]/','/[\/b:(.*)]/');
        $bbc_b=array('<span style="font-weight:bold">','</span>'); 
        $bbc_num=count($bbc_a); 
        $loop=0; 
        while($loop<$bbc_num) { 
            $bbcode=str_replace($bbc_a[$loop], $bbc_b[$loop], $bbcode); 
            $loop++; 
        } 
        return $bbcode; 
    }
    
    $podaciSR=Parse($podaciSR);
    $podaciCG=Parse($podaciCG);


19.02.2007. u 13:03 

Nemanja Avramović
PHP developer, Webinsane
Mladenovac, Srbija

Moderator
Član broj: 32202
Poruke: 3912
212.200.145.*

ICQ: 266136396
Sajt: www.avramovic.info


Profil

icon Re: PHP i BBcode, problematicno ispisivanje19.02.2007. u 13:23
probaj preg_replace...
Moj sajt. Moj blog. Moj avatar. Moj grad. Moja frizura.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
19.02.2007. u 13:23 

Br@nkoR

Član broj: 2597
Poruke: 1388
*.ptt.yu.



Profil

icon Re: PHP i BBcode, problematicno ispisivanje19.02.2007. u 14:03
Citat:
Nemanja Avramović: Pa može preko regularnih izraza. Najlakše:
Code:
preg_match_all('/[b:(.*)](.*)[\/b:(.*)]/',$bbcode,$matches);
print_r($matches);


Nisam probao ali ovo bi trebalo da vrši posao. Verovatno (ne verovatno nego sigurno) ovaj regularni izraz može preciznije da se definiše ali ja sam totalni početnik kad su regularni izrazi u pitanju :)


Ovo gore neće raditi.

Karakteri "[" i "]" predstavljaju rezervisane karaktere, meta-karaktere.
Potrebno je backslash-ovati navedene karaktere.

Pa bi ovo gore trebalo da izgleda:
Code:

/\[b:(.*)\](.*)\[\/b:(.*)\]/U


Npr. jedno od rešenja je:
Code:

$pattern = '/\[((\w+):([\w\d]+))\](.+)\[\/\1\]/U';
$re = '<$2>$4</$2>';
$text = '[i:69f56c80cf]blablabla.[/i:69f56c80cf][b:69f56c80cf]petak 16. februar[/b:69f56c80cf]Blablabla.';
echo preg_replace($pattern, $re, $text);


Ovde gore može nastati problem jer korisnik može uneti bilo šta (npr. [div:123]asdf[/div:123]) i napraviti probleme u html kodu.

Jedno od rešenja ograničiti ono što će samo biti parsirano, npr samo "i" ili "b":
Code:

$pattern = '/\[(([ib]{1}):([\w\d]+))\](.+)\[\/\1\]/U';



E sada ukoliko želiš da imaš mogućnost da koristiš bb tagove jedan unutar drugog možeš napraviti rekurzivnu funkciju pomoću funkcije preg_replace_callback

Code:

$pattern = '/\[((\w+):([\w\d]+))\](.+)\[\/\1\]/U';
$text = '[i:69f56c80cf][b:69f56c80cf]blablabla.[/b:69f56c80cf][/i:69f56c80cf] [b:69f56c80cf]petak 16. februar[/b:69f56c80cf] Blablabla. [div:123]asdf[/div:123]';
function test($matches) {
  global $pattern, $text;
  if (is_array($matches)) {
    switch($matches[2]) {
      case 'i':
        $matches = '<span style="font-style: italic;">' . $matches[4] . '</span>';
      break;
      case 'b':
        $matches = '<span style="font-weight: bold;">' . $matches[4] . '</span>';
      break;
    }
  }
  return preg_replace_callback($pattern, 'test', $matches);
}
echo preg_replace_callback($pattern, 'test', $text);


Sve ovo moguće je i drugačije uraditi, možda sam nešto malo zakomplikovao ;). Moguće da ne prolazi neka kombinacija, ali možda posluži kao ideja.

Pozdrav.

[Ovu poruku je menjao Br@nkoR dana 19.02.2007. u 19:24 GMT+1]
19.02.2007. u 14:03 

BodaTajson
Novi Sad

Član broj: 72752
Poruke: 18
*.dynamic.sbb.co.yu.



Profil

icon Re: PHP i BBcode, problematicno ispisivanje19.02.2007. u 15:35
hvala, hvala, hvala :)



ovo je ono sto mi je trebalo :))

Code:

$pattern = '/\[(([ibu]{1}):([\w\d]+))\](.+)\[\/\1\]/U';
$re = '<$2>$4</$2>';
$text = '[i:69f56c80cf]blablabla.[/i:69f56c80cf][b:69f56c80cf]petak 16. februar[/b:69f56c80cf]Blablabla.';
echo preg_replace($pattern, $re, $text);



hvala vam puno obojici! :)

19.02.2007. u 15:35 

[es] :: PHP :: PHP i BBcode, problematicno ispisivanje

[ Pregleda: 655 | Odgovora: 7 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.