URL in BBCODES

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
claUdiu
Mesaje:313

URL in BBCODES

Buna, am si eu o intrebare.

Am acest cod:

Cod: Selectaţi tot

<?php
$coduriBB = array('[ingrosat]' => '<b>',
                  '[/ingrosat]' => '</b>',
                  '[italic]' => '<i>',
                  '[/italic]' => '</i>',
                  '[subliniat]' => '<u>',
                  '[/subliniat]' => '</u>',
                  '[lt]' => '<',
                  '[gt]' => '&gt',
                  '[blockquote]' => '<blockquote>',
                  '[/blockquote]' => '</blockquote>',
                  '[script]' => '<div id="script">',
                  '[/script]' => '</div>',
                  '[citat]' => '<div id="citat">',
                  '[/citat]' => '</div>',
                  '[linie_noua]' => '<br/>');
 



echo '<p>'.convert_bbcodes( $text ).'</p>'; 


function convert_bbcodes( $t ) 
{ 
  $search = array_keys( $GLOBALS['coduriBB'] );
  $t = str_replace( $search,$GLOBALS['coduriBB'], $t );
  return '<font color="black">'.$t.'</font>';
}
?>
cum pot sa adaug si linkuri, imagini si culoare la text? adica sa am asa:

nume link pentru <a href="url">nume link</a>
[img]adresa%20img[/img] pentru <img src="adresa img">
[culoare cod="cod culoare"]text[/culoare]<font color="culoare">text</font>

Chiar nu inteleg cum sa fac chestiile astea...
Se spune ca...."omul tot invata in viata". Dar...Totusi...Trebie sa ne oprim undeva, nu?

MarPlo Mesaje:4343
Codul dat mai sus e cam depasit, folosit in versiuni PHP vechi.
Se poate face aceasta transformare din BBCODE in HTML cu o singura functie.
E un tutorial despre asta la pagina Transformare cod PHPBB si smiles in HTML.

claUdiu Mesaje:313
Am facut asa:

Cod: Selectaţi tot

<?php 
$text = $_POST['my_ta'];
$cu = array('/\[ingrosat](.*?)\[\/ingrosat]/i',
            '/\[stramb](.*?)\[\/stramb]/i',
            '/\[subliniat](.*?)\[\/subliniat]/i',
           '/\[culoare=(.*?)](.*?)\[\/culoare]/i',
           '/\[imagine](.*?)\[\/imagine]/i',
           '/\[linie_noua]/i',
           '/\:X/i',
           '/\:*/i',
           '/\[url=(.*?)](.*?)\[\/url]/i',
           '/\[aliniare=(.*?)](.*?)\[\/aliniare]/i');
     
$html = array('<b>$1</b>',
              '<i>$1</i>', 
              '<u>$1</u>',
              '<font color="$1">$2</font>',
              '<img src="$1"/>',
              '<br>',
              '<img src="zambarete/inimioara.gif"/>',
              '<img src="zambarete/pupic.gif"/>',
              '<a href="$1" target="_blank">$2</a>',
              '<div align="$1">$2</div>');

$text = preg_replace($cu , $html, $text ) ; 
echo $text;
?>
si acum daca pun doua zambarete imi apare:

Cod: Selectaţi tot

*<img src="zambarete/inimioara.gif"/>
iar dupa fiecare litera imi apare acel zambaret.

Iar daca pun doar unul il arata de 3 ori.....

- Si cand pun [subliniat] sau oricare alt cod apare asa: <u>Text</u> si apare un zambaret dupa fiecare litera
Se spune ca...."omul tot invata in viata". Dar...Totusi...Trebie sa ne oprim undeva, nu?

MarPlo Mesaje:4343
Sunt greseli in codul RegExp, nu sunt escapate toate caracterele care trebuie, iar ":" nu trebuie precedat de "\".
Incearca asa (nu am testat, posibil sa fi omis vreo corectare):

Cod: Selectaţi tot

<?php
$text = $_POST['my_ta'];
$cu = array('/\[ingrosat\](.*?)\[\/ingrosat\]/is',
            '/\[stramb\](.*?)\[\/stramb\]/is',
            '/\[subliniat\](.*?)\[\/subliniat\]/is',
           '/\[culoare=(.*?)\](.*?)\[\/culoare\]/is',
           '/\[imagine\](.*?)\[\/imagine\]/is',
           '/\[linie_noua\]/is',
           '/:X/is',
           '/:\*/is',
           '/\[url=(.*?)\](.*?)\[\/url\]/is',
           '/\[aliniare=(.*?)\](.*?)\[\/aliniare\]/is');
     
$html = array('<b>$1</b>',
              '<i>$1</i>',
              '<u>$1</u>',
              '<font color="$1">$2</font>',
              '<img src="$1"/>',
              '<br>',
              '<img src="zambarete/inimioara.gif"/>',
              '<img src="zambarete/pupic.gif"/>',
              '<a href="$1" target="_blank">$2</a>',
              '<div align="$1">$2</div>');

$text = preg_replace($cu , $html, $text ) ;
echo $text;
?>