Autor Zpráva
KubaFibi
Profil
Dobrý den,
zde mám funkci pro převod bb-kódu do html. Dnes jsem se bb-kódy začal zabývat, takže jsem se pro začátek nechal inspirovat kódy jiných uživatelů.
function bb2html($text){
$bb[] = "/\[[iI]\](.+?)\[\/[iI]\]/s";
$html[] = "<i>\\1</i>";

$bb[] = "/\[[bB]\](.+?)\[\/[bB]\]/s";
$html[] = "<b>\\1</b>";

$bb[] = "/\[[uU]\](.+?)\[\/[uU]\]/s";
$html[] = "<u>\\1</u>";

$text = preg_replace($bb, $html, $text);
return $text;
}

Funguje, ale když ji budu volat např. takto: echo bb2html("TEXT[/b"); (nebo s jinak neuzavřeným bb-kódem), zobrazí se [b]TEXT[/b. Potřeboval bych funkci nějak upravit, aby se při takovémto volání funkce zobrazilo pouze TEXT, bez těch špatně zapsaných [b][/b

Předem děkuji za pomoc.
Str4wberry
Profil
echo bb2html("TEXT[/b"); (nebo s jinak neuzavřeným bb-kódem), zobrazí se [b]TEXT[/b

Pochybuji, že se tam přidá na začátek „[b]“.

Jinak není lepší v případě „[b][/b“ spíš špatně zadaný kód opravit? Tj. mít koncové „]“ v regulárním výrazu nepovinné, pokud se jedná o častou chybu při zadávání.

Pokud chceš řešit i další chyby při zadávání, není nic jednoduššího, než po uvedeném nahrazení všechny znaky, co vypadají jako pokus o BB kód, nemilosrdně odstranit.
KubaFibi
Profil
Str4wberry:
Pochybuji, že se tam přidá na začátek „[b]“.
To [b] se tam přidalo, taky jsem nejdřív myslel, že se [b] nahradí za <b>, ale ono se to nahrazuje pouze když je bb-kód zapsaný celý.


Nad opravou jsem neuvažoval, ale bylo by to lepší. Hlavně jsem se chtěl zbavit toho [b][/b které by tam v textu překáželo. Ano, oprava bude lepší. Jak to tedy udělat, aby bylo koncové ] nepovinné?
Str4wberry
Profil
Pochyboval jsem nad tím, že se z „TEXT[/b“ udělá zmíněnou funkcí „[b][/b“.

Jak to tedy udělat, aby bylo koncové ] nepovinné?
Použít příslušný kvantifikátor.
KubaFibi
Profil
Str4wberry:
Pochyboval jsem nad tím, že se z ‚TEXT[/b‘ udělá zmíněnou funkcí ‚[b][/b‘.
Aha, už to vidím, jen jsem se trochu upsal. Chtěl jsem napsat bb2html("[b]TEXT[/b");.

Takže, pokud jsem správně pochopil tak to zapíšu takto:

function bb2html($text){
$bb[] = "/\[[iI]\](.+?)\[\/[iI]\]*/s";
$html[] = "<i>\\1</i>";

$bb[] = "/\[[bB]\](.+?)\[\/[bB]\]*/s";
$html[] = "<b>\\1</b>";

$bb[] = "/\[[uU]\](.+?)\[\/[uU]\]*/s";
$html[] = "<u>\\1</u>";

$text = preg_replace($bb, $html, $text);
return $text;
}

Zřejmě to funguje. Ty regulérní výrazy mi ještě moc nejdou, takže opravdu děkuji.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: