Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Najlepszy parser bbcode ?
Forum PHP.pl > Forum > Przedszkole
konrados
Witam,

Próbuję coś znaleźć w googlu ale tego jest za dużo - chodzi mi o parser bbclode, byle by po prostu rozumiał takie rzeczy jak np.
CODE
[img]
, jaki byście proponowali?

w php.net ( http://pl2.php.net/bbcode ) znalazłem niby odpowiednie funkcje, ale coś trzeba instalować a ja nie mam takiej możliwości.
AxZx
  1. <?php
  2. public static function replace($tekst = '')
  3.    {
  4.        $tekst = preg_replace("#(.*?)#si",'<strong>$1</strong>',$tekst);
  5.        $tekst = preg_replace("#(.*?)#si",'<i>$1</i>',$tekst);
  6.        $tekst = preg_replace("#(.*?)#si",'<span class="podkreslony">$1</span>',$tekst);
  7.        $tekst = preg_replace("#[strong](.*?)[/strong]#si",'<strong>$1</strong>',$tekst);
  8.        $tekst = preg_replace("#[img](.*?)[/img]#si",'<img src="$1" alt="$1" title="$1" />',$tekst);
  9.        $tekst = preg_replace("#[img=(.*?)](.*?)[/img]#si",'<img src="$1" alt="$2" title="$2" />',$tekst);
  10.        $tekst = preg_replace("#[quote](.*?)[/quote]#si",'<span class="cytat">$1</span>',$tekst);
  11.        $tekst = preg_replace("#[code](.*?)[/code]#si",'<span class="kod">$1</span>',$tekst);
  12.        
  13.        return $tekst;
  14.    }
  15. ?>
konrados
O, działa! Spodziewałem się czegoś bardziej skomplikowanego. Dzięki!

Za nadto się pośpieszyłem... w moim skrypcie zamieniam również wszystko to co wygląda na link na a href=http://link i przez to bbcode IMG nie działa prawidłowo, bo też przecież zawiera link.

Istnieje jakieś proste rozwiązanie na to? Np. jakieś regular expression które zamienia wszystko co wyglada na link chyba, że znajduje się w tagach IMG ?
AxZx
tak, istnieje.
najpierw tekst obrabiasz funkcją do bbcode, później do autolink.

autolink może wyglądać tak (źródło: Symfony):
  1. <?php
  2. function _auto_link_urls($text, $href_options = array())
  3. {
  4.  $href_options = _tag_options($href_options);
  5.    SF_AUTO_LINK_RE,
  6.    create_function('$matches', '
  7.      if (preg_match("/<as/i", $matches[1]))
  8.      {
  9.        return $matches[0];
  10.      }
  11.      else
  12.      {
  13.        return $matches[1].'<a href="'.($matches[2] == "www." ? "http://www." : $matches[2]).$matches[3].'"'.$href_options.'>'.$matches[2].$matches[3].'</a>'.$matches[4];
  14.      }
  15.    ')
  16.  , $text);
  17. }
  18. ?>
konrados
Dzięki.
seba22
Witam,

Nie chciał bym tworzyć nowego tematu, i dostać po uszach, więc dopisuje się tutaj.

Mam sobie taki praserek, tak to nazwijmy, po imieniu, taka zabawka, namiastka ;P

  1. <?php
  2. function bbcode($text)
  3. {
  4. $search = array (
  5.           '#(.*?)#si',
  6.           '#(.*?)#si',
  7.           '#(.*?)#si',
  8.    '#
    (.*?)
    #si'
    ,
  9. '#(.*?)#si',
  10. '#[img](.*?)[/img]#si',
  11.  
  12.       );
  13.       $replace = array(
  14.           '<b>1</b>',
  15.           '<i>1</i>',
  16.           '<u>1</u>',
  17.  '<center>1</center>',
  18. '<a  href="1"></a>',
  19. '<img src="1">',
  20.       );
  21.       $message=$text;
  22.       $message = preg_replace($search, $replace, $message);
  23.  
  24.  
  25. // zamiana TAG lini na  BR
  26. $str     = "$message";
  27. $order   = array("[br]");
  28. $replace = '<br>';
  29. // Processes r\n's first so they aren't converted twice.
  30. $newstr = str_replace($order, $replace, $str);
  31. $message=$newstr;
  32. // zamiana TAG lini na  BR
  33.  
  34.  
  35. return $message;
  36. }
  37. // bbcode / experimental
  38. ?>



I chciał bym dorobić tam coś takiego:

  1. <?php
  2. [url=http://www.bankfotek.pl/view/164595][/url]
  3. ?>


Czy jest jakiś pomysł, aby dorobić tutaj obsługę, miniaturki będącej odnośnikiem ?

Mam na myśli jakąś łatwą wersję, która nie rozwali mi całkowicie środowiska winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.