magikern Skrevet 14. august 2005 Del Skrevet 14. august 2005 tenkte jeg skulle få bort bruken av <br /> i ett artikkel script, men så kom jeg bort i ett problem: bruker da $string = "<p>$string</p>"; str_replace("\n","</p><p>",$string); men det den gjør feil er at den setter inn flere tomme <p></p> ved f.eks \n\n\n jeg vil heller da ha noe sånt som <p style="margin-top: Xpx;">tekst her</p> hvor X øker med 1 for hver \n... Lenke til kommentar
0lav Skrevet 14. august 2005 Del Skrevet 14. august 2005 Funker det ikke a bruke nl2br() da? Lenke til kommentar
???????? Skrevet 14. august 2005 Del Skrevet 14. august 2005 Det er ikke noe problem å løse, bare du vet hvilke funksjoner du skal bruke og kan litt regex. Den enkleste løsningen er å bruke preg_replace_callback(), og i tillegg opprette en egen funksjon som vi skal komme tilbake til litt senere. I preg_replace_callback() så søker du etter mønsteret /((\r)?\n)+/ Grunnen til at den burde se slik ut er fordi windows og *nix behandler linjeskrift på to forskjellige måter, så det du søker etter er at det skal være linjeskift med eller uten \r, og at det er minst et eller flere linjeskrift. Så sendes mønsteret som passer i stringen videre til funksjonen du definere. I funksjonen din så teller du enkelt og greit antallet \n og setter inn noe lignende denne: if($num > 1) { return "<p style=\"margin-top: $num;\">\n"; } else { return "<p>\n"; } That's it. Lykke til! Lenke til kommentar
magikern Skrevet 15. august 2005 Forfatter Del Skrevet 15. august 2005 etter flertallige timer programmering i java, var ikke dette fullt så forståelig som det kanskje kunne ha vært, jeg kommer fram til dette: $string = "<p>$string</p>"; function paragraph($matches){ $num = count($matches); if($num > 1){ return "</p>\n<p style=\"margin-top: $num;\">\n"; }else{ return "</p>\n<p>\n"; } } echo preg_replace_callback('/((\r)?\n)+/','paragraph',$string); den printer <p style="margin-top: 2;"> hver gang det er mer enn 1*\n, men det kommer fortsatt 2 selvom det er større mellomrom... Lenke til kommentar
???????? Skrevet 15. august 2005 Del Skrevet 15. august 2005 Du kan ikke bruke count($matches) fordi du søker etter en eller flere linjeskift, dvs. hele resultatet ligger da i en av $matches'ene - så du må tellet antallet \n i $matches[0] tror jeg det blir da. Lenke til kommentar
magikern Skrevet 15. august 2005 Forfatter Del Skrevet 15. august 2005 en foreach på $matches viste at $key hopper mellom 1 og 0, mens $value aldri settes... så derfor blir aldri $num noe annet enn 1 eller 0 ved å sette den til $matches[0], mens $matches[1] hele tiden er en tom variabel, sikker på at regexpen er riktig?? http://magikern.sytes.net/test/test.php Lenke til kommentar
???????? Skrevet 15. august 2005 Del Skrevet 15. august 2005 $matches[0] skal vel da inneholde hele matchen, prøv å sett inn $matches[0]."<p..." i det du returnerer og så viser du kilden. Da burde den vise at linjeskiftene er der. Lenke til kommentar
magikern Skrevet 23. august 2005 Forfatter Del Skrevet 23. august 2005 ????????: får fortsatt ikke denne til å fungere helt, du har ikke noen flere forslag? 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å