[php / sql] CSV export linebreaks

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • twisted2000
  • Registratie: Januari 2004
  • Laatst online: 05-03-2021
Hallo,

Kan iemand me helpen met het volgende? Ik heb een formulier op een website staan waar in een textarea het e.e.a. wordt ingevuld.
Dat komt in een db terecht die ik 'mediumtext' heb toegekend.

Hiervan moet ik een export naar csv maken. Dat gaat allemaal goed op 1 ding na.

Zodra ik in de textarea een return maak zet hij deze ook in de db. Ondanks dat er nl2br staat ik \r \n \n\r en \r\n replace blijft in de database de nieuwe regel ook op een nieuwe regel staan.

Dit als gevolg dat als ik een export naar csv maak er vanaf dat punt (de return) ook naar een nieuwe rij wordt gegaan en mijn bestand door elkaar raakt.

Ook als ik bij het exporteren naar csv \r replace gebeurd er niets.

Iemand enig idee?

Acties:
  • 0 Henk 'm!

  • woutertje
  • Registratie: Maart 2002
  • Laatst online: 12:02
Zou je het stukje code wat het vervangen doet en/of waar je nl2br aanroept kunnen posten?

Acties:
  • 0 Henk 'm!

  • marcop23
  • Registratie: December 2009
  • Laatst online: 11:40
Gebruik je fputcsv om een .csv te maken? Of heb je daar zelf iets voor geknutseld?
Ondanks dat er nl2br staat ik \r \n \n\r en \r\n replace blijft in de database de nieuwe regel ook op een nieuwe regel staan.
Dit stukje begrijp ik niet helemaal. De zin loopt niet lekker?

Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 11-09 13:55
nl2br() heb je niet nodig. HTML breaks hebben niets te zoeken in een CSV bestand. Overigens laat nl2br de linebreak inderdaad staan, hij voegt hier alleen een '<br>' aan toe.

RFC4180 specififeert een CRLF (\r\n) als linebreak in CSV. Het is echter niet gezegd dat dat ook is wat je uit de textarea krijgt, dat is afhankelijk van de client.
En let op als je Excel gebruikt om de CSV te bekijken, die gaat niet fatsoenlijk om met de specificaties (en verschilt ook tussen Nederlandse en Engelse installaties).

Je kunt bijv een reguliere expressie over de input halen om alle 3 de smaken newlines om te zetten in het gewenste;
PHP:
1
$sText = preg_replace("(\r\n|\r|\n)", "\r\n", $sText);

Het vervangen van '\r\n' naar '\r'n' slaat natuurlijk nergens op, maar maakt de expressie een stuk eenvoudiger ;)

[ Voor 35% gewijzigd door frickY op 25-06-2012 16:16 ]


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 11-09 20:27

Matis

Rubber Rocket

Misschien zou je kunnen kijken of je met text delimiters of anders een placeholder kunt werken.

If money talks then I'm a mime
If time is money then I'm out of time