Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Parser BBCodu v PHP

PHP Ostatní Parser BBCodu v PHP

ONEbit hosting Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Jednoduchý skript, který převede BBCode tagy v textu na HTML tagy. Skript využívá regex a je tedy dobré ho ovládat.

Skript byl vytvořen pro soutěž Machr na PHP - Parser BB kódu


Galerie

Program byl vytvořen v roce 2013.

 

Stáhnout

Staženo 156x (3.55 kB)
Aplikace je včetně zdrojových kódů v jazyce php

 

 

Program pro vás napsal Zdeněk Bauer
Avatar
Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!
Autor se věnuje převážně PHP s frameworkem Nette, ale neštítí se ani C# a Javy.
Miniatura
Všechny články v sekci
Ostatní tutoriály v PHP
Miniatura
Následující článek
Šablonovací systém PHP_JUI - Úvod
Aktivity (1)

 

 

Komentáře

Avatar
Kit
Redaktor
Avatar
Kit:24.12.2013 11:02

Když je program krátký, dá se vložit přímo do textu:

<!DOCTYPE html>
<html lang='cs'>
<head>
<title></title>
<meta charset='utf-8'>
</head>
<body>
<?php
/*
 * Autor: zdenda204
 * Datum: 16.12.2013 12:40
 */
function preloz($text) {

    // Pole pro vyhledání BBCode tagů.
    $bbcode = array(
        '~\[b\](.*?)\[/b\]~s',
        '~\[i\](.*?)\[/i\]~s',
        '~\[u\](.*?)\[/u\]~s',
        '~\[url\]((?:ftp|https?)://.*?)\[/url\]~s',
        '~\[color=(.*?)\](.*?)\[/color\]~s',
        '~\[size=(.*?)\](.*?)\[/size\]~s',
        '~\[img\](https?://.*?\.(?:jpg|gif|png))\[/img\]~s',
        '(:\)(?!\)))',
        '(:\((?!\)))'
    );

    // Pole s HTML tagy kterými se BBCode tagy přepíší.
    $htmlcode = array(
        '<b>$1</b>',
        '<em>$1</em>',
        '<u>$1</u>',
        '<a href="$1">$1</a>',
        '<span style="color:$1;">$2</span>',
        '<span style="font-size:$1px;">$2</span>',
        '<img src="$1" alt="" />',
        '<img src="./smile.png" alt="Šťastný" />',
        '<img src="./sad.png" alt="Smutný" />'
    );

    // Funkce která najde a přepíše BBCody v určitém stringu.
    return preg_replace($bbcode,$htmlcode,$text);
}

//Příklad
$bbtext = "Toto je [b]zvýraznéný[/b], toto je [u]podtrhnutý[/u] a toto je styl [i]italic[/i]. Když se odřu, teče mi [color=orange]oranźová krev[/color] a jseme smutný :(. Ale kdybych vyhrál, byl bych šťastný :)";
$htmltext = preloz($bbtext);
echo $htmltext;
?>
</body>
</html>
Editováno 24.12.2013 11:03
Odpovědět 24.12.2013 11:02
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Zdeněk Bauer
Redaktor
Avatar
Odpovídá na Kit
Zdeněk Bauer:24.12.2013 11:08

Díky, tak pro příště to vím :)
Teď už to editovat je nejspíše zbytečný když kód jsi sem vložil :)

 
Odpovědět 24.12.2013 11:08
Avatar
Kit
Redaktor
Avatar
Odpovídá na Zdeněk Bauer
Kit:24.12.2013 11:13

Nechal jsem ho i automaticky odsadit editorem, aby to vypadalo lépe. Jinak jsem s tím nic nedělal.

Odpovědět 24.12.2013 11:13
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Marek Z.
Redaktor
Avatar
Marek Z.:24.12.2013 11:18

Ovšem co to udělá s tímto například:

Toto je [b]zvýra[b]zvýraznéný[/b]znéný[/b]

EDIT: Vím je to detail.. :D

Editováno 24.12.2013 11:20
Odpovědět 24.12.2013 11:18
Chybami se člověk učí, běžte se učit jinam!
Avatar
Kit
Redaktor
Avatar
Odpovídá na Marek Z.
Kit:24.12.2013 11:30

Také koukám, že se ten regulární výraz nechová hladově, jak bych očekával.

Odpovědět 24.12.2013 11:30
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Zdeněk Bauer
Kit:24.12.2013 11:40

Zkusil jsem jedno pole vypustit. Chová se to stejně, ale program je o něco robustnější.

<!DOCTYPE html>
<html lang='cs'>
<head>
<title></title>
<meta charset='utf-8'>
</head>
<body>
<?php
/*
 * Autor: zdenda204
 * Datum: 16.12.2013 12:40
 * Upravil: Kit
 */
function preloz($text) {

    // Pole pro vyhledání BBCode tagů.
    // s HTML tagy kterými se BBCode tagy přepíší.
    $bbcode = array(
        '~\[b\](.*?)\[/b\]~s' => '<b>$1</b>',
        '~\[i\](.*?)\[/i\]~s' => '<em>$1</em>',
        '~\[u\](.*?)\[/u\]~s' => '<u>$1</u>',
        '~\[url\]((?:ftp|https?)://.*?)\[/url\]~s' => '<a href="$1">$1</a>',
        '~\[color=(.*?)\](.*?)\[/color\]~s' => '<span style="color:$1;">$2</span>',
        '~\[size=(.*?)\](.*?)\[/size\]~s' => '<span style="font-size:$1px;">$2</span>',
        '~\[img\](https?://.*?\.(?:jpg|gif|png))\[/img\]~s' => '<img src="$1" alt="" />',
        '(:\)(?!\)))' => '<img src="./smile.png" alt="Šťastný" />',
        '(:\((?!\)))' => '<img src="./sad.png" alt="Smutný" />',
    );

    // Funkce která najde a přepíše BBCody v určitém stringu.
    return preg_replace(array_keys($bbcode), $bbcode, $text);
}

//Příklad
echo preloz(<<<EOT
Toto je [b]zvýraznéný[/b], toto je [u]podtrhnutý[/u] a toto je styl [i]italic[/i]. Když se odřu, teče mi [color=orange]oranźová krev[/color] a jseme smutný :(. Ale kdybych vyhrál, byl bych šťastný :)
EOT
);
echo preloz("Toto je [b]zvýra[b]zvýraznéný[/b]znéný[/b]");
?>
</body>
</html>
Odpovědět 24.12.2013 11:40
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Marek Z.
Redaktor
Avatar
Odpovídá na Kit
Marek Z.:24.12.2013 12:03

Ano, proto jsem to řešil přes while v machrovi. Kdyby se to dalo do objektivu tak by to byl dle mého názoru celkem slušní univerzál..

Kolikrát jsem se dočetl, že se prostě používá na tento problém 'preg_match_all'.

Odpovědět 24.12.2013 12:03
Chybami se člověk učí, běžte se učit jinam!
Avatar
Marek Z.
Redaktor
Avatar
Marek Z.:24.12.2013 12:06

Můžeš ještě použít modifikátor, konkrétně U. Ale ten ti zajistí, že ti to zakončí a né to, že ti vezme první zakončovací.

Resp.:

Toto je [b]zvýra[b]zvýraznéný[/b]znéný[/b]
Toto je <b>zvýra[b]zvýraznéný</b>znéný[/b] //Bez modifikátoru U
Toto je <b>zvýra[b]zvýraznéný[/b]znéný</b> //S modifikátorem U
Editováno 24.12.2013 12:09
Odpovědět 24.12.2013 12:06
Chybami se člověk učí, běžte se učit jinam!
Avatar
Kit
Redaktor
Avatar
Odpovídá na Marek Z.
Kit:24.12.2013 12:14

Zase to pak blbne u tohoto:

Toto je [b]zvýra[/b]zvýraznéný[b]znéný[/b]
Odpovědět 24.12.2013 12:14
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Marek Z.
Redaktor
Avatar
Odpovídá na Kit
Marek Z.:24.12.2013 12:17

Zkrátka, pokud chceš vyřešit tento problém, tak to musíš projet tolikrát, kolikrát se prostě vyskytuje ten párový tag..

Kdežto u tohoto řešení to v podstatě projedeš jen jednou.

Odpovědět 24.12.2013 12:17
Chybami se člověk učí, běžte se učit jinam!
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.