Помогни ни да направим Uroci.net по - богат! Добави урок

BBCODE с PHP

PHP » PHP
nma   трудност:    видян: 7300


Кода работи като се дефинира една функция, на която може и се подава текста, в който има bbcode. Функцията го обработва и заменя bbcode-а с хтмл код, който сте описали.

PHP Код:
<!-- php buffer start -->function BBCODE($bbcode)
{
//
bbcode кодовете, който ще бъдат заменени..
$bbc_a=array("[str]","[/str]","[b]","[/b]","[u]","[/u]","[big]","[/big]","[huge]","[/huge]","[email]","[/email]","[url]","[/url]","[red]","[/red]","[orange]","[/orange]","[green]","[/green]","[blue]","[/blue]");

//
html съответствията, с които ще се замени bbcode-а
$bbc_b=array("<strike>","</strike>","<b>","</b>","<u>","</u>","<font size=4>","</font>","<font size=8>","</font>","<a href="mailto:","">E-MAIL LINK</a>","<a href="","" target="blank">WEB LINK</a>","<font color=#ff6666>","</font>","<font color=#ffaa66>","</font>","<font color=#66ff66>","</font>","<font color=#6666ff>","</font>");

$bbc_num=count($bbc_a);
$loop=0;
while(
$loop<$bbc_num)
{
$bbcode=str_replace($bbc_a[$loop], $bbc_b[$loop], $bbcode);
$loop++;
}


return
$bbcode;
}
<!-- php buffer end -->
Сега като искате да обработите стринг (текст) и да конвертирате bbcode-a в хтмл трябва единствено да да имате променлива, която се подава към функцията.
PHP Код:
<!-- php buffer start -->$string = "hi this is [b]BOLD[/b]";
$string = BBCODE($string);
echo
$string;
<!-- php buffer end -->
Резултат:

html кода ще е: hi this is <b>Bold</b>
това което ще видите в браузъра: hi this is Bold



Коментари (5)

Angel на 31.05 2006 в 06:54ч.
Привет,

Ми то хубаво е да пишеш уроци, но трябва и да пишеш добри уроци, особенно що се отнася до код.

Този тук е пълен с дупки, най-голямата от който е пропуска на каквато и да е проверка от страна на скрипт-а за таг-ове , винати трябва да се филтрират. В този случай извикването на функцията по този начин:

$string = "hi this is [b]BOLD[/b]alert('дупка');";
$string = BBCODE($string);

Ще изпълни скрипт-а, което не е желателно.
Ако скрипта записва ббкодовете в база данни и после след четене ги променя на хтмл тагове става още по кофти, защото тогава идва на ред SQL Injection-a :(

Филтрация на данните с регуларни изрази и/или стрипване на всички тагове, е добър метод за защита. :zzz
ISRalien на 10.09 2006 в 03:36ч.
Ангеле, не мисля, че целта на сайта е във всеки туториал да учат хората на сигурност, ще се получи едно доста голямо повторение. Според мен би било по-удачно да направят един урок специално по темата. Все пак хората не са написали цял сайт, а примерен код. Сигурността сам ще си я правиш.
sensor на 15.02 2007 в 20:32ч.
Кодът който си дал НЯМА да се изпълни ;) Нужни са тагове или пък по някакъв начин да се окаже, че се използва JS. Единственото което е нужно на горния скрипт е някаква забрана от изпълняване на чист HTML htmlspecialchars(); би свършил чудесна работа ;)

Поздрави ;)

$string = "hi this is BOLDalert('дупка');";
$string = BBCODE($string);
Emilcho на 21.12 2007 в 11:56ч.
На мене кода си ми бачка. Само ко искашда си спестиш малко място можеш да сложиш function-а в отделен файл (editor.php) и да напишеш
include("editor.php");
След това си добавяш $string-а и СА кефиш. :)
FANatikaa на 19.06 2012 в 18:10ч.
function bbcode($text, $mahnihtml = true) {
$bb = $text;

if ($mahnihtml)
$bb = htmlspecialchars($bb);

// [-]
$bb = preg_replace("/\[\-\]/", "", $bb);

// [br]
$bb = preg_replace("/\[\br\]/", "", $bb);

// [b]удебелен[/b]
$bb = preg_replace("/\[b\]((\s|.)+?)\[\/b\]/", "\\1", $bb);

// [i]наклонен текст[/i]
$bb = preg_replace("/\[i\]((\s|.)+?)\[\/i\]/", "\\1", $bb);

// [u]подчертаване[/u]
$bb = preg_replace("/\[u\]((\s|.)+?)\[\/u\]/", "\\1", $bb);

// [u]подчертаване[/u]
$bb = preg_replace("/\[u\]((\s|.)+?)\[\/u\]/i", "\\1", $bb);

// [img]картинка[/img]
$bb = preg_replace("/\[img\]([^\s'\"]+?)\[\/img\]/i", "", $bb);

// [img=картинка]
$bb = preg_replace("/\[img=([^\s'\"]+?)\]/i", "", $bb);

// [color=цвят]Текст[/color]
$bb = preg_replace(
"/\[color=([a-zA-Z]+)\]((\s|.)+?)\[\/color\]/i", "\\2", $bb);

// [color=#ffcc99]Текст[/color]
$bb = preg_replace(
"/\[color=(#[a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9])\]((\s|.)+?)\[\/color\]/i", "\\2", $bb);

// [url=Линк]Текст[/url]
$bb = preg_replace(
"/\[url=([^()\s]+?)\]((\s|.)+?)\[\/url\]/i", "\\2", $bb);

// [url]Линк[/url]
$bb = preg_replace(
"/\[url\]([^()\s]+?)\[\/url\]/i", "\\1", $bb);

// [size=4]Текст[/size]
$bb = preg_replace(
"/\[size=([1-7])\]((\s|.)+?)\[\/size\]/i", "\\2", $bb);

// [font=Arial]Текст[/font]
$bb = preg_replace(
"/\[font=([a-zA-Z ,]+)\]((\s|.)+?)\[\/font\]/i", "\\2", $bb);

// Нови редове
$bb = nl2br($bb);
return $bb;
}


това е моето решение :]

Регистрирайте се, за да добавите коментар


Калдейта ЕООД - © 2003-2010. Всички права запазени.
Препоръчваме: Национален Бизнес | Bomba.bg | IT Новини | Диплома.бг | TRAVEL туризъм | Реферати | AmAm.bg | Иде.ли | Курсови работи | Фото Форум | Spodeli.net | Фото-Култ | Atol.bg | Elmaz.com | MobileBulgaria.com | Казанлък.Com