Forum - HAJLO.COMmunity [ forum dyskusyjne, kasa za posty, forum młodzieżowe, forum wielotematyczne ]


Nabór do ekipy forum!!! Więcej informacji: Napisz PW

Użytkownicy przeglądający ten wątek: 1 gości



[PHP] Bardzo prosty parser BBCode
(21-02-2012 16:37) #1

[PHP] Bardzo prosty parser BBCode

Nie zawsze na pisanej przez nas stronie chcemy dać użytkownikom możliwość komentowania z użyciem kodu HTML, tak samo jest z forami dyskusyjnymi. Niekiedy chcemy również ułatwić naszym użytkownikom używanie formatowania, lub wstawienie specjalnych efektów takich jak cytat. Potrzeba matką wynalazków - w takim właśnie celu powstał prosty w implementacji jak i w użyciu język BBCode.

Czytając ten tutorial, dowiesz się, jak we własnym projekcie zaimplementować przetwarzanie BBCode. Nie jest to skomplikowane, niemniej jednak chciałbym pokazać rozwiązanie bezpieczniejsze niż użycie standardowej funkcji str_replace (lub str_ireplace>).

Na czym polega wada metody polegającej na użyciu wyżej wspomnianych funkcji? Po pierwsze, jeżeli nie napiszemy dodatkowych paru linijek kodu, nie możemy upewnić się, że zamknięto wszystkie znaczniki BBCode. Gdyby tak się nie stało, można by było doprowadzić do powstania niezamkniętych znaczników (X)HTML, czego efekt nie wygląda zbyt atrakcyjnie. Po drugie, nie da się tu łatwo sprawdzić, czy znacznik zawiera jakąkolwiek treść.

Proponowana przeze mnie metoda polega na użyciu rozszerzenia PCRE, czyli funkcji preg_replace. Aby dobrze ją zrozumieć, niezbędna jest podstawowa wiedza o wyrażeniach regularnych. Wykonująca te operacje funkcja może wyglądać tak (możemy oczywiście dodawać własne tagi):

Kod PHP:
function parse_bbcode($message) {
    
$bbcodes = array (
            
'#\[b\](.*?)\[/b\]#' => '<strong>\\1</strong>',
            
'#\[i\](.*?)\[/i\]#' => '<em>\\1</em>',
            
'#\[u\](.*?)\[/u\]#' => '<span style="text-decoration:underline">\\1</span>',
            
'#\[color=(.*?)\](.*?)\[/color\]#' => '<span style="color:\\1">\\2</span>'
        
);
    return 
preg_replace(array_keys($bbcodes), array_values($bbcodes), $message);





Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości

Linki

Copyrights

Tłumaczenie: Polski Support MyBB Silnik MyBB Styl: Darek