Autor Zpráva
monsieur_duc
Profil
všechny zdravim!
u diskuze mám odkaz, díky kterému se zkopíruje do pole pro vzkaz a .
JENŽE! nevím jak udělat aby byl text tučný když se vypíše v diskuzi.
jako když už je uložen v databázi tak aby to místo [b] udělalo <b>
díky za rady!
SwimX
Profil
monsieur_duc
do textarei nebo kam, vkládej BBcode [ url= ][ /ur l] [ b ] [ i ]
a potom přes php:
$zprava = preg_replace("#\[b\](.+)\[/b\]#is", "<b>$1</b>", $zprava); 
$zprava = preg_replace("#\[i\](.+)\[/i\]#is", "<i>$1</i>", $zprava);
Nox
Profil
Snad je to dobře
$text = preg_replace("/\[(/)?b\]/",'<$1b>',$text);
monsieur_duc
Profil
SwimX
Nox
díky oboum je to funkční!
SwimX
Profil
monsieur_duc
eště takové rady na které sem přišel, když sem si dělal návštěvní knihu.
Měj dvě tabulky v db, do jedné ukládej nezměněnou -> BBcode
a do druhé tu změněnou na html tagy. Ale pozor - nejprve vem zprávu a udělej s ní něco jako htmlentites() a až potom změň BBcode za tvoje html. Docílíš tím toho, že ti nějak chytrák nenapíše do příspěvku <iframe src="></iframe> a potobné vtípky.
A 2 tabulky se hodí, když náhodnou se rozhodneš pro nějaké změny v záměnách kódů.
+ si pohlídej: Obrana proti SQL Injection

To Noxovo řešení neřeší, kdy ti někdo umaže koncovou značku -> budeš mít <b> a tudíž celou knihu tučně..
Nox
Profil
Rozdíl je v tom, že SwimXovo změní tagy po párech, kdežto moje trochu hloupě jednotlivě, což by mohlo vadit ve chvíli, kdy uživatel
zadá tagy špatně (nebude se rovnat počet otevřených a uzavřených tagů)
Takže raději použij ty první
Edit: a ještě sem pomalej :)
SwimX
Profil
Nox
sice to mění po párech ale blbě mění todle:
[ b ] [ i ] [ / b] [/ i ]

a myslím, že sem narazil i s
[ b ] [ /b] text [b ] [ /b]
on totíž vzal první a poslední a ty prostřední nezměnil, takže prasárna.. Není to dokonalé ani zdaleka
AM_
Profil
a myslím, že sem narazil i s
[ b ] [ /b] text [b ] [ /b]


řešením by měly být líné kvantifikátory, takže:
$zprava = preg_replace("#\\[b\\](.+?)\\[/b\\]#is", "<b>$1</b>", $zprava);

nebo
$zprava = preg_replace("#\\[b\\](.+)\\[/b\\]#isU", "<b>$1</b>", $zprava);

přičemž přepínač U dělá všechny kvantifikátory ungreedy (tedy líné).
SwimX
Profil
AM_
řešením by měly být líné kvantifikátory
ano, mám to tu otevřené v tabu: http://interval.cz/clanky/perl-compatible-regularni-vyrazy-v-php-modifikatory-a-line-kvantifikatory/
ale není čas studovat :(
Díky
AM_
Profil
nz :) dá se to říct několika slovy, ungreedy (líné) kvantifikátory se zapisují tak, že se za klasický greedy kvantifikátor přidá ? (tedy +?, *?, existuje i ??). Fungují tak, že narozdíl od greedy kvantifikátorů, které se snaží pojmout co nejvíce textu, ungreedy se snaží pojmout co nejméně (shoda výrazu b+? s řetěžcem "bbbb" bude "b", shoda výrazu b+ se stejným řetěžcem bude "bbbb").

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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