Avatar billede lordsaxo Nybegynder
13. februar 2005 - 01:49 Der er 4 kommentarer og
1 løsning

[tag] problem med preg_replace

Jeg har et kæmpe problem med nogle tags, som jeg er ved at lave til min side..

Tagsne skal virke som phpBB's, og der skal blandt andet være en der hedder [kasse][/kasse], som laver en tabel..
Men problemer er at den eneste måde hvorpå jeg kan sikre at brugerne ikke kan f.eks. lave [/kasse] og ødelægge sidens design, er ved at sætte /Umis på min preg_replace.. men så kan man f.eks. ikke lave 2 kasser inde i hinanden - er det muligt at lave et system så brugeren ikke kan ødelægge designet, og samtidig kan lave flere kasser inde i hinanden?
Sådan ser min nuværende linie ud:
$hp = preg_replace("/\[kasse farve=([#A-Za-z0-9]+) kantfarve=([#A-Za-z0-9]+) bredde=([#0-9]+)\](.+)\[\/kasse\]/Umis", "<table style=\"background-color: \\1; border: 1px solid \\2; width: \\3px;\"><tr><td>\\4</td></tr></table>", $hp);

Min andet problem består i at jeg har en der laver http:// og www links klikbare.. Men jeg vil gerne have en funktion der hedder [img=http://sti.til/billede]..
Sådan ser min linie ud:
$str = preg_replace ("/(ftp|http|https|telnet|news|nntp|file|irc):\/\/([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i", "<a href=\"\\1://\\2\"".$ins_str.">\\1://\\2</a>", $str);

På forhånd tak - 100 point for hvert spørgsmål!
Avatar billede coderdk Praktikant
14. februar 2005 - 10:44 #1
Du kan ikke lave nestede tags som du vil, med preg_replace - Du kan dog bruge preg til at "tokenize" dine tags og smide dem på en stak, og derefter poppe dem efterhånden - Det er lidt kompliceret ;)

Mht din anden så prøv lige:

$str = preg_replace ("/(?!img=)(ftp|http|https|telnet|news|nntp|file|irc):\/\/([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i", "<a href=\"\\2://\\3\"".$ins_str.">\\2://\\3</a>", $str);

Eller også så vær konsistent og brug tekst - Det er nemmere
Avatar billede lordsaxo Nybegynder
01. marts 2005 - 12:26 #2
coderdk, hvordan kan man tokenize dem, og derefter smide dem på en stak? Har du evt. et link til hvor jeg kan lære denne metode?

Og mht. din anden metode, tak for tippet..
Undskyld jeg har svaret så sent, men har haft en del problemer med mit internet på det sidste (TDC kan jo ikke finde ud af at man skal have 4mbit ifølge deres kampagne, og så smadrer de hele ens net..)
Avatar billede coderdk Praktikant
01. marts 2005 - 19:45 #3
Det er en smule kompliceret, det letteste for dig ville at være:

$hp = preg_replace("/\[kasse farve=([#A-Za-z0-9]+) kantfarve=([#A-Za-z0-9]+) bredde=([#0-9]+)\]/mis", "<table style=\"background-color: \\1; border: 1px solid \\2; width: \\3px;\"><tr><td>", $hp);

$hp = preg_replace("/\[\/kasse\]/mis", "</td></tr></table>", $hp);
Avatar billede lordsaxo Nybegynder
02. marts 2005 - 22:01 #4
Ja, men så kan en bruger jo bare skrive [/kasse] og så ødelægger han sidens design? Det er jo netop det jeg skal have lavet en sikring på - det er der mit problem ligger! :S
Avatar billede lordsaxo Nybegynder
19. marts 2005 - 18:55 #5
Det fik jeg ikke så meget ud af, så jeg snupper mine point selv, og laver nogle nye indlæg..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester