Autor | Zpráva | ||
---|---|---|---|
monsieur_duc Profil |
#1 · Zasláno: 8. 2. 2009, 12:34:40
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 |
#2 · Zasláno: 8. 2. 2009, 12:36:33 · Upravil/a: SwimX
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 |
#3 · Zasláno: 8. 2. 2009, 12:38:59
Snad je to dobře
$text = preg_replace("/\[(/)?b\]/",'<$1b>',$text); |
||
monsieur_duc Profil |
#4 · Zasláno: 8. 2. 2009, 12:40:33
SwimX
Nox díky oboum je to funkční! |
||
SwimX Profil |
#5 · Zasláno: 8. 2. 2009, 12:45:22 · Upravil/a: SwimX
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 |
#6 · Zasláno: 8. 2. 2009, 12:47:07 · Upravil/a: Nox
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 |
#7 · Zasláno: 8. 2. 2009, 12:56:52
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 |
#8 · Zasláno: 8. 2. 2009, 18:57:30
„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 |
#9 · Zasláno: 8. 2. 2009, 19:19:56
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 |
#10 · Zasláno: 8. 2. 2009, 21:19:31
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").
|
||
Časová prodleva: 15 let
|
0