| Autor | Zpráva | ||
|---|---|---|---|
| KubaFibi Profil |
#1 · Zasláno: 14. 1. 2012, 20:24:35
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 |
#2 · Zasláno: 14. 1. 2012, 20:44:51
„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 |
#3 · Zasláno: 14. 1. 2012, 20:56:49
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 |
#4 · Zasláno: 14. 1. 2012, 21:12:41
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 |
#5 · Zasláno: 14. 1. 2012, 21:21:00
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. |
||
|
Časová prodleva: 14 let
|
|||
0