|
Ако някога сте оставяли съобщения в Bulletin Board, вероятно ви е направило впечатление, че за форматиране на текста се използват подобни на HTML тагове. Ако не сте, вижте тук „myLinks / Нов myLink”. Повечето от тези бюлетини (като vBulletin например) работят чрез вграден BBCode интерпретатор.
В този урок ще научите как можете да направите свой собствен PHP интерпретатор за BBCode. Първо ще разгледаме някои от по-простите BBCode тагове (като [b], [i] и [u]), след това ще видим и възможностите за влагане на таговете един в друг. Простите BBCode тагове [b], [i] и [u] наистина се обработват просто и не са необходими някакво по-специални познания. Достатъчно е да сте на ясно с функцията preg_replace() и регулярните изрази. Нека да започнем да създаваме функция за преформатиране на BBCode в HTML стъпка по стъпка: CODE
Естествено така написана функцията не прави нищо. Първото нещо, което трябва да направим е да добавим функцията htmlentities() за да предотвратим евентуални неочаквани HTML или XSS „инжекции”. Добавяме като първи ред във фуннкцията: CODE
Сега да напишем и код който преформатира простите BBCode тагове. Ако вече сте погледнали документацията или сте на ясно с функцията preg_replace(), знаете, че тя има 3 задължителни параметъра: шаблон за търсене (pattern), начина на замяна (replacement) и в какво да се търси (subject). В нашия пример чрез pattern ще описваме BBCode таговете, чрез replacement ще задаваме HTML тагове, които заменят BBCode таговете и чрез subject - входния стринг. Обикновено трудната част при „preg_.....()” - функциите в PHP е създаването на точен регулярен израз, но в случая с простите BBCode тагове това не е чак толкова сложно. Например за таг [b] израза е: CODE
Тук частта (.*?) означава „всико между [b] и [/b]” тоест това е текста, който трябва да стане удебелен (bold). В края на израза има 2 символа „is”, това са така наречените модификатори (modifiers). Те са допълнителни опции. Модификатора ‘i’ указва, че не трябва са се прави разлика между малки и големи букви. Тоест ‘b’ и ‘B’ следва да се приемат за едно и също нещо. Модификатора ‘s’ указва, че преминаването на нов ред в subject не трябва да спира търсенето. Ако липсва този модификатор, няма да можем да обработваме текстове написани на няколко реда (повече за модификаторите). Параметъра „replacement” също е елементарен. Просто трябва да напишем HTML код, като вмъкнем отговарящия на (.*?) текст където е необходимо. За целта се използва автоматично създадената променлива $1: CODE
Продължаваме да разширяваме нашата функция: CODE
Това е достатъчно за преработване на трите прости тага - [b], [i] и [u]. Но можем да помислим как да направим функцията по-опростена и евентуално по-бърза. Можем да сведем извикването на preg_replace() до еднократно, тъй като тя приема като параметри и масиви. С тази промяна нашата функция ще изглежда така: CODE
Възможно е да имате BBCodes с няколко параметъра, като например: CODE
Регулярния израз в случаяще бъде: CODE
и малко по-различен начин на замяна - имаме вече 2 автоматични променливи: CODE
Както виждате не е сложно. Можете правите преработка на всякакви BBCode тагове. Влагане на тагове Влагането на простите тагове, които разгледахме до тук не е проблем и ще работи нормално. Например CODE
е напълно допустим израз. Влагането на еднакви тагове е безсмислено и няма да има никакъв ефект. Например: CODE
Има обаче случаи в които се налага влагане на еднотипни тагове. Такъв е случая с таг [quote], който се използва обикновено за показване на цитати. Възможно и нормално е да има вложени [quote]. В този случай регулярните изрази не могат да ни помогнат. Ще трябва да напишем специален PHP код за целта. Това което трябва да направим е да заменим [quote] и [/quote] съответно с подходящ HTML код. Трябва и да се уверим, че броя на отварящите тагове съответства на броя на затварящите, иначе подредбата на следващия текст ще се наруши. Функцията, която прави това изглежда така: CODE
Както се вижда от кода, функцията първо коригира входния стринг, ако има незатворени тагове, след което прави проста замяна. Тази функция може да се доработи така, че да обработва и други тагове, които допускат влагане. Заключение В този урок видяхте колко просто може да се направи интерпретатор на BBCode. Вие можете да разширите примерния код с най-различни тагове като [image], [video], [sound] и др. Източник: http://www.phpit.net/article/create-bbcode-php/1/ http://www.phpit.net/article/create-bbcode-php/2/
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||










