Gå til innhold

bytte ut \n med <p>


Anbefalte innlegg

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
Videoannonse
Annonse

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

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
  • 2 uker senere...

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...