/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Fjerne overflødige linjeskift i starten og~
Fra : Jens Gregersen [9670~


Dato : 10-08-03 21:30

Hej

Jeg har en gæstebog lavet på filer. Altså med fopen, fputs osv. Jeg bruger
så nl2br() til at erstatte linjeskift med <br> / <br />. Problemet er bare
når der er en eller anden idi*t, der sætter 17 linjeskift til at starte med
og 31 til at slutte med. Disse linjeskift vil jeg gerne have fjernet.
Desuden vil jeg gerne have det lavet sådan, at der max kan være 2 <br>'er
efter hinanden så man undgår en masse overflødige linjeskift.

Altså skal...

[eks]
Hej allesammen<br>
<br>
<br>
<br>
ville bare sige hej<br>
<br>
<br>
<br>
Jensen
[/eks]

....erstattes med:

[eks2]
Hej allesammen<br>
<br>
ville bare sige hej<br>
<br>
Jensen
[/eks2]

Jeg kunne forestille mig noget a la...

if (antallet af <br> =>2) {
fjern overflødige
}

....men jeg kan ikke lige se hvordan man laver det med php (har ikke prøvet
men går ikke ud fra at ovenstående virker

--
Jens Gregersen
Ved mail, fjerne pr0n'et i min mailadresse



 
 
Kim Schulz (10-08-2003)
Kommentar
Fra : Kim Schulz


Dato : 10-08-03 21:35

On Sun, 10 Aug 2003 22:29:33 +0200
"Jens Gregersen [9670]" <jg@PR0Nstofanet.dk> wrote:
> Hej
>
> Jeg har en gæstebog lavet på filer. Altså med fopen, fputs osv. Jeg
> bruger så nl2br() til at erstatte linjeskift med <br> / <br />.
> Problemet er bare når der er en eller anden idi*t, der sætter 17
> linjeskift til at starte med og 31 til at slutte med. Disse linjeskift
> vil jeg gerne have fjernet. Desuden vil jeg gerne have det lavet
> sådan, at der max kan være 2 <br>'er efter hinanden så man undgår en
> masse overflødige linjeskift.
>
> Altså skal...
>
> [eks]
> Hej allesammen<br>
> <br>
> <br>
> <br>
> ville bare sige hej<br>
> <br>
> <br>
> <br>
> Jensen
> [/eks]
>
> ...erstattes med:
>
> [eks2]
> Hej allesammen<br>
> <br>
> ville bare sige hej<br>
> <br>
> Jensen
> [/eks2]
>
> Jeg kunne forestille mig noget a la...
>
> if (antallet af <br> =>2) {
> fjern overflødige
> }
>
> ...men jeg kan ikke lige se hvordan man laver det med php (har ikke
> prøvet men går ikke ud fra at ovenstående virker
>

noget ala dette burde gøre det:
$text = preg_replace("/^<br>\n<br>/", "",$text);

Jens Gregersen [9670~ (10-08-2003)
Kommentar
Fra : Jens Gregersen [9670~


Dato : 10-08-03 21:39

[snip]

> noget ala dette burde gøre det:
> $text = preg_replace("/^<br>\n<br>/", "",$text);

Hmm... Er det sådan at du gider skrive en lidt mere uddybbende forklaring?

Som jeg ser det fjerner det script alle <br> der er gentaget over to gange?
Eller er jeg helt gal på den?

Og det ^ er jeg ikke helt med på ;)

--
Jens Gregersen
Ved mail, fjerne pr0n'et i min mailadresse



Thomas D (10-08-2003)
Kommentar
Fra : Thomas D


Dato : 10-08-03 22:50

Jens Gregersen [9670] wrote:
> [snip]
>
>> noget ala dette burde gøre det:
>> $text = preg_replace("/^<br>\n<br>/", "",$text);
>
> Hmm... Er det sådan at du gider skrive en lidt mere uddybbende
> forklaring?

Den er her:
http://www-2.cs.cmu.edu/People/rgs/pl-regex.html
Det er perl regular expressions du ka læse om.


> Som jeg ser det fjerner det script alle <br> der er gentaget over to
> gange? Eller er jeg helt gal på den?
>
> Og det ^ er jeg ikke helt med på ;)

Det kommer du helt med på efter at ha leget lidt mere med perl regular
expressions.
Det er i det hele taget en god ting at kunne regex, det har du fx. brug for
når du skal søge/erstatte i vi/vim -:)


--
Med venlig hilsen
Thomas D
http://tdn.peps.dk
Musikere tjener penge på ulovligt kopieret software.



Kim Schulz (10-08-2003)
Kommentar
Fra : Kim Schulz


Dato : 10-08-03 21:43

On Sun, 10 Aug 2003 22:38:49 +0200
"Jens Gregersen [9670]" <jg@PR0Nstofanet.dk> wrote:
> [snip]
>
> > noget ala dette burde gøre det:
> > $text = preg_replace("/^<br>\n<br>/", "",$text);
>
> Hmm... Er det sådan at du gider skrive en lidt mere uddybbende
> forklaring?
>
> Som jeg ser det fjerner det script alle <br> der er gentaget over to
> gange? Eller er jeg helt gal på den?
>
> Og det ^ er jeg ikke helt med på ;)


det fjerner alle de gange hvor du har 2 linjer efter hinanden med <br>
HVOR det står først på linjen.


Martin Koch Andersen (10-08-2003)
Kommentar
Fra : Martin Koch Andersen


Dato : 10-08-03 21:45

Jens Gregersen [9670] wrote:

> Jeg har en gæstebog lavet på filer. Altså med fopen, fputs osv. Jeg
> bruger så nl2br() til at erstatte linjeskift med <br> / <br />.
> Problemet er bare når der er en eller anden idi*t, der sætter 17
> linjeskift til at starte med og 31 til at slutte med. Disse
> linjeskift vil jeg gerne have fjernet. Desuden vil jeg gerne have det
> lavet sådan, at der max kan være 2 <br>'er efter hinanden så man
> undgår en masse overflødige linjeskift.

Det er ikke helt klart om du laver nl2br før eller efter du gemmer.
Du bør gemme _uden_ nl2br, og først kalde nl2br i forbindelse med
udskrivning af beskederne i din gæstebog. Således af filen altså indeholder
almindelige linebreaks fremfor <br />. Det var bare et tip.

Følger du denne opskrift, gør følgende, hvad du ønsker:

# Når du gemmer:
$input = trim($input);
$input = preg_replace("|[\n]{3,}|", "\n\n", $input);
.... skriv $input til din fil ...


# Når du henter:
.... hent $output fra din fil ...
$output = nl2br($output);
.... udskriv $output ...

Og lidt forklaring: Trim fjerner foran/bagved stående newlines, spaces mv.
Det regulære udtryk erstatter flere end 2 efterfølgende \n med præcis 2 \n.

--
Martin



Jens Gregersen [9670~ (10-08-2003)
Kommentar
Fra : Jens Gregersen [9670~


Dato : 10-08-03 22:31

> Det er ikke helt klart om du laver nl2br før eller efter du gemmer.
> Du bør gemme _uden_ nl2br, og først kalde nl2br i forbindelse med
> udskrivning af beskederne i din gæstebog. Således af filen altså
> indeholder almindelige linebreaks fremfor <br />. Det var bare et tip.

Jeg laver nl2br før jeg gemmer i filen. Men for at så mere overskuelige
koden (jeg vil lave noget mini-admin så jeg kan rette i den rå html-kode)
har jeg selv sat nogle \n ind.

> Følger du denne opskrift, gør følgende, hvad du ønsker:
>
> # Når du gemmer:
> $input = trim($input);
> $input = preg_replace("|[\n]{3,}|", "\n\n", $input);
> ... skriv $input til din fil ...
>
>
> # Når du henter:
> ... hent $output fra din fil ...
> $output = nl2br($output);
> ... udskriv $output ...

Jeg gør som ovenstående, men jeg synes ikke det virker.
Det hele kan ses på: http://jg.peps.dk/test/gast/
Desuden har jeg lavet .phps-filer:
- http://jg.peps.dk/test/gast/skriv.phps
- http://jg.peps.dk/test/gast/index.phps

--
Jens Gregersen
Ved mail, fjerne pr0n'et i min mailadresse



Martin Koch Andersen (10-08-2003)
Kommentar
Fra : Martin Koch Andersen


Dato : 10-08-03 22:46

Jens Gregersen [9670] wrote:

>> # Når du gemmer:
>> $input = trim($input);
>> $input = preg_replace("|[\n]{3,}|", "\n\n", $input);
>> ... skriv $input til din fil ...

> Jeg gør som ovenstående, men jeg synes ikke det virker.

$input = trim($input);
$input = preg_replace("|[\r\n]{4,}|", "\r\n\r\n", $input);

--
Martin



Jens Gregersen [9670~ (10-08-2003)
Kommentar
Fra : Jens Gregersen [9670~


Dato : 10-08-03 23:00

[snip forkert]

> $input = trim($input);
> $input = preg_replace("|[\r\n]{4,}|", "\r\n\r\n", $input);

Nu virker det! :)

Men sidste problem:

Det, der bliver skrevet til filen vil jeg gerne have til at se pænt ud.

Altså i stedet for at...

[eks]
<table><tr><td>(indhold)</td></tr></table>
[/eks]

....bliver skrevet vil jeg gerne have...

[eks]
<table>
<tr>
<td>
(indhold)
</td>
</tr>
</table>

....skrevet. Men ved at køre nl2br /efter/ skrivningen gør jo at de også
bliver tolket som linjeskift :-/

--
Jens Gregersen
Ved mail, fjerne pr0n'et i min mailadresse



Thomas D (11-08-2003)
Kommentar
Fra : Thomas D


Dato : 11-08-03 11:14

Jens Gregersen [9670] wrote:
> [snip forkert]
>
>> $input = trim($input);
>> $input = preg_replace("|[\r\n]{4,}|", "\r\n\r\n", $input);
>
> Nu virker det! :)
>
> Men sidste problem:
>
> Det, der bliver skrevet til filen vil jeg gerne have til at se pænt
> ud.
>
> Altså i stedet for at...
>
> [eks]
> <table><tr><td>(indhold)</td></tr></table>
> [/eks]
>
> ...bliver skrevet vil jeg gerne have...
>
> [eks]
> <table>
> <tr>
> <td>
> (indhold)
> </td>
> </tr>
> </table>
>
> ...skrevet. Men ved at køre nl2br /efter/ skrivningen gør jo at de
> også bliver tolket som linjeskift :-/


erhm....
hvorfor nøjes du ikke med at køre nl2br() på inputtet og ikke alt det andet?
lige som på 00y.


--
Med venlig hilsen
Thomas D
http://tdn.peps.dk
Musikere tjener penge på ulovligt kopieret software.



Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste