jorgis Skrevet 10. juni 2004 Del Skrevet 10. juni 2004 (endret) Hei, der! Jeg holder på å lage et søtt lite script for syntax highlighting og omforvandling av HTML. Dette for å lette arbeidet til dem som lager tutorials om HTML. Scriptet oversetter < til < osv. Bruker htmlspecialchars() til den jobben. Har en rekke regexps til å få fatt i deler av HTML-koden og legge farge på det, men sliter veldig med å få hentet ut atributtene. Akkurat nå bruker jeg denne regexp'en: [code] $input = preg_replace("#<span style=\"color:(.+?);\">(.+?)"(.+?)"(.+?)</span>#is", "<span style=\"color:#000099;\">\\2</span><span style=\"color:#0000FF;\">"\\3"</span><span style=\"color:#000099;\">\\4</span>", $input); [/code] ...men den henter bare ut første atributt. Flere atributter blir rett og slett ignorert. PS: Alle span-taggene er kode for highlighting, lagt til av tidligere regexp's. PS2: En HTML-atributt er noe inni en HTML-tag som er innkapslet i "", for eksempel [quote] <input type=[b]"text"[/b] /> [/quote] Det som er satt i fet tekst vil jeg hente ut og sette farge på. Endret 10. juni 2004 av jorgenindahouse Lenke til kommentar
RipZ- Skrevet 11. juni 2004 Del Skrevet 11. juni 2004 Er ikke helt sikker på hva du mener, men lagde et eksmpel på en regexp-funksjon som kan fikse det jeg tror du ber om. Du kan sikkert arbeide ut i fra den, tror du ikke? <? $code = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Untitled Document</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" test="test"> </head> <body onload="test"> </body> </html>'; function attr($match) { return htmlspecialchars("<" . $match[1] . " ") . preg_replace("/([a-z\-]+)=(".*?")($| )/", "\\1=<b>\\2</b>\\3", $match[2]) . htmlspecialchars(">"); } echo nl2br(preg_replace_callback("/<([a-z]+) (([a-z\-]+="(.*?)" *)*)\/?>/is", 'attr', htmlspecialchars($code))); ?> Lenke til kommentar
jorgis Skrevet 11. juni 2004 Forfatter Del Skrevet 11. juni 2004 Skal ta en titt på den. Lenke til kommentar
jorgis Skrevet 12. juni 2004 Forfatter Del Skrevet 12. juni 2004 Hmm. Nå bruker jeg koden din, og den funker nesten helt fint. Den fargelegger atributtene slik den skal, men den ødelegger tagger som lukkes i samme tag. (<br />, <hr />). Den fjerner rett og slett skråstreken. I tillegg legger den til mellomrom på diverse steder. Her er koden slik jeg bruker den nå: function attr($match) { return htmlspecialchars("<" . $match[1] . " ") . preg_replace("#([a-z\-]+)=(".*?")($| )#", "\\1=<span style=\"color:#0000FF;\">\\2</span>\\3", $match[2]) . htmlspecialchars(">"); } $input = preg_replace_callback("#<([a-z]+) (([a-z\-]+="(.*?)" *)*)\/?>#is", 'attr', $input); Har endret litt på den, men har ikke rørt regexp'en noe særlig. Har ikke helt satt meg inn i hva den gjør, skjønner du. Lenke til kommentar
RipZ- Skrevet 12. juni 2004 Del Skrevet 12. juni 2004 <? $code = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Untitled Document</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" test="test" /> </head> <body onload="test" /> <hr /> </body> </html>'; function attr($match) { return htmlspecialchars("<" . $match[1] . " ") . preg_replace("/([a-z\-]+)=(".*?")($| |\n)/", "\\1=<b>\\2</b>\\3", $match[2]) . htmlspecialchars(">"); } echo '<pre>'; echo preg_replace_callback("/<([a-z]+) (([a-z\-]+="(.*?)" *)*.*?)>/is", 'attr', htmlspecialchars($code)); ?> Ikke testet noe særlig, men den skal iallfall ikke fjerne disse skråstrekene. Du må presisere bedre hva du mener med at den legger til mellomrom av og til. Om du skal lage en egen HTMLparse-funksjon, er det vel å forlange at du setter deg inn i regexpen? Lenke til kommentar
jorgis Skrevet 12. juni 2004 Forfatter Del Skrevet 12. juni 2004 (endret) Tusen takk. Funker utmerket nå, selv om jeg måtte modifisere litt på den. Husk at tall også er lov i HTML-tagger... Mellomrommene som kom av og til kom som følge av noe rot lengre oppe i koden. Igjen: Tusen takk! Dette problemet har irritert meg en liten stund nå. EDIT: link til HTMLizer Endret 12. juni 2004 av jorgenindahouse Lenke til kommentar
RipZ- Skrevet 12. juni 2004 Del Skrevet 12. juni 2004 Ahh, stemmer. Glemte helt HTML-tagger som h1 og h2... Ikke alltid like enkelt Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå