[php] replace newline probleem

Pagina: 1
Acties:
  • 1.429 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Oysterhoys
  • Registratie: Juni 2003
  • Laatst online: 15-12-2024
Ik maak een filemanager in php die bestanden opslaat van, en opent in, een online editor.
Die editor genereert html code met newlines erin, maar kan alleen zonder newlines inlezen.
Dus genereert:
<p>bla bla</p>
<p>meer bla bla</p>
En inlezen:<p>bla bla</p><p>meer bla bla</p>
Makkelijke replace klus in dacht ik, hetzij, 1) voordat ik 'post' naar php mbv. een javascript :
code:
1
 value.replace("\n","")
,of 2) voordat ik het naar de editor stuur in php :
code:
1
$fdata  = preg_replace("/\\n/", "", $fdata);

Voor de test heb ik wel gereplaced met een 'x' dan zet hij wel de 'x' neer aan het begin van een nieuwe regel,maar hij doet niet de backspace waardoor alle code op een regel komt.
Replacen met een backspace is me ook nog een raadsel syntaxisch ( [/b] ??)
Wie weet ?

[ Voor 12% gewijzigd door Oysterhoys op 04-06-2005 12:45 ]

A friend is one who knows us, but loves us anyway.


Acties:
  • 0 Henk 'm!

Verwijderd

Ik gok dat je ook \r moet replacen.

Acties:
  • 0 Henk 'm!

  • cytherea
  • Registratie: Oktober 2003
  • Laatst online: 12-09 10:22
str_replace??
Is misschien nog sneller ook dan een regex.

Acties:
  • 0 Henk 'm!

  • Oysterhoys
  • Registratie: Juni 2003
  • Laatst online: 15-12-2024
ben nog niet zo lang met php bezig, zit de online php manual door te spitten op regex, maar dat is een pittig hoofdstuk, wat doet die \r dan ook alweer ?

[ Voor 6% gewijzigd door Oysterhoys op 04-06-2005 12:53 ]

A friend is one who knows us, but loves us anyway.


Acties:
  • 0 Henk 'm!

  • Oysterhoys
  • Registratie: Juni 2003
  • Laatst online: 15-12-2024
cytherea schreef op zaterdag 04 juni 2005 @ 12:46:
str_replace??
Is misschien nog sneller ook dan een regex.
zou kunnen, maar dan blijft het probleem, toch ?!

A friend is one who knows us, but loves us anyway.


Acties:
  • 0 Henk 'm!

  • We Are Borg
  • Registratie: April 2000
  • Laatst online: 14:26

We Are Borg

Moderator Wonen & Mobiliteit / General Chat
\r is ook een newline, zoals \n, maar de \r is weer voor windows (of andersom :) )

Acties:
  • 0 Henk 'm!

  • Oysterhoys
  • Registratie: Juni 2003
  • Laatst online: 15-12-2024
We Are Borg schreef op zaterdag 04 juni 2005 @ 12:54:
\r is ook een newline, zoals \n, maar de \r is weer voor windows (of andersom :) )
ga ik es proberen, thanx

A friend is one who knows us, but loves us anyway.


Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
We Are Borg schreef op zaterdag 04 juni 2005 @ 12:54:
\r is ook een newline, zoals \n, maar de \r is weer voor windows (of andersom :) )
Dit is niet helemaal waar, \r staat voor end of line en \n voor new line, maar het zou evengoed kunnen dat dit de oplossing is ;) !

In windows wordt trouwens standaard \r\n gebruikt aan het einde van de regel en in linux varianten \n.

[ Voor 14% gewijzigd door Borizz op 04-06-2005 13:02 ]

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 20-09 22:44

MBV

Ik denk dat je een ander probleem hebt: een PHP regex werkt (voor zover ik weet) alleen voor 1 regel, anders dan de PERL regexen dus. Ik denk dat je dus beter een str_replace kan doen, is ook nog eens sneller.

Acties:
  • 0 Henk 'm!

  • Oysterhoys
  • Registratie: Juni 2003
  • Laatst online: 15-12-2024
zou dan toch zo moeten zijn :P
code:
1
$fdata  = preg_replace("/\\n\\r/", "", $fdata);

geeft in ieder geval niet het gewenste resultaat :/

A friend is one who knows us, but loves us anyway.


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15:14

Creepy

Tactical Espionage Splatterer

Het is of \n of \r\n en niet \n\r. Maar dat had je ondertussen vast ook al wel gevonden m.b.v. de GoT search. Je bent lang niet de enige (geweest) met dit probleem ;)

En kan je niet je editor fixen zodat ie z'n eigen rommel in kan lezen?

Btw: \r staat voor "Carriage Return" en "\n" voor "Newline"

[ Voor 13% gewijzigd door Creepy op 04-06-2005 13:10 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Borizz schreef op zaterdag 04 juni 2005 @ 13:01:
[...]


Dit is niet helemaal waar, \r staat voor end of line en \n voor new line, maar het zou evengoed kunnen dat dit de oplossing is ;) !

In windows wordt trouwens standaard \r\n gebruikt aan het einde van de regel en in linux varianten \n.
Jep, en op de MAC alleen \r. Als je ze allemaal wil afvangen zou je dus eigenlijk op alle drie moeten replacen wat neerkomt op ongeveer zoiets:
PHP:
1
preg_replace("/(\\r\\n|\\r|\\n)/", "", $fdata);


Bedenk me net dat je ze alleen weg wil hebben... In dat geval ben je wss sneller met twee str_replaces:
PHP:
1
str_replace("\n", '', str_replace("\r",'',$fdata));

[ Voor 22% gewijzigd door T-MOB op 04-06-2005 13:13 ]

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • Oysterhoys
  • Registratie: Juni 2003
  • Laatst online: 15-12-2024
MBV schreef op zaterdag 04 juni 2005 @ 13:02:
Ik denk dat je een ander probleem hebt: een PHP regex werkt (voor zover ik weet) alleen voor 1 regel, anders dan de PERL regexen dus. Ik denk dat je dus beter een str_replace kan doen, is ook nog eens sneller.
zou kunnen dat str_replace beter is, maar preg_replace is juist een perl-stijl replace in php, anders is het ereg_replace

A friend is one who knows us, but loves us anyway.


Acties:
  • 0 Henk 'm!

  • Oysterhoys
  • Registratie: Juni 2003
  • Laatst online: 15-12-2024
T-MOB schreef op zaterdag 04 juni 2005 @ 13:09:
[...]


Jep, en op de MAC alleen \r. Als je ze allemaal wil afvangen zou je dus eigenlijk op alle drie moeten replacen wat neerkomt op ongeveer zoiets:
PHP:
1
preg_replace("/(\\r\\n|\\r|\\n)/", "", $fdata);


Bedenk me net dat je alleen weg wil hebben... In dat geval ben je wss sneller met twee str_replaces:
PHP:
1
str_replace("\n", '', str_replace("\r",'',$fdata));
thanx, ga ik nu proberen !

A friend is one who knows us, but loves us anyway.


Acties:
  • 0 Henk 'm!

  • Oysterhoys
  • Registratie: Juni 2003
  • Laatst online: 15-12-2024
T-Mob is the MAN _/-\o_ _/-\o_ _/-\o_
T-Mob is the MAN _/-\o_ _/-\o_ _/-\o_
T-Mob is the MAN _/-\o_ _/-\o_ _/-\o_

Het werkt !

A friend is one who knows us, but loves us anyway.


Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
Oysterhoys schreef op zaterdag 04 juni 2005 @ 13:10:
[...]

zou kunnen dat str_replace beter is, maar preg_replace is juist een perl-stijl replace in php, anders is het ereg_replace
Probeer het eens met str_replace, waarom zou je juist een perl stijl replace willen gebruiken?

Lees anders dit eens door: http://nl2.php.net/manual/nl/pcre.pattern.syntax.php, dan zie je ook dat je \r en \n juist niet hoeft te escapen!

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • Oysterhoys
  • Registratie: Juni 2003
  • Laatst online: 15-12-2024
Thanx AMD power _/-\o_

A friend is one who knows us, but loves us anyway.


Acties:
  • 0 Henk 'm!

  • 4Real
  • Registratie: Juni 2001
  • Laatst online: 14-09-2024
Misschien nog een andere oplossing:
PHP:
1
str_replace(array("\r", "\n"), "", $string);


scheelt weer een functie en lijkt me aardig fail-save :)

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

(jarig!)
MBV schreef op zaterdag 04 juni 2005 @ 13:02:
Ik denk dat je een ander probleem hebt: een PHP regex werkt (voor zover ik weet) alleen voor 1 regel, anders dan de PERL regexen dus. Ik denk dat je dus beter een str_replace kan doen, is ook nog eens sneller.
preg werkt gewoon met multi-line als je dat instelt, maar aangezien de \r en/of \n ook op een regel staan (aan het einde ervan ;) ) maakt dat niet uit. 't Belangrijkste verschil tussen multi-line en single-line is trouwens dat de newline tekens wel/niet opgenomen worden in bijvoorbeeld (met name) de '.' .
Overigens moet je vziw ook bij perl expliciet opgeven dat je newlines wilt matchen bij een '.' .

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:29

crisp

Devver

Pixelated

ACM: je bedoelt line-span ipv multi-line ;)
Overigens zal de waarde van een textarea bij een POST altijd \r\n-type newlines bevatten (tenminste, bij browsers die zich aan deze afspraak houden, maar volgens mij doen ze dat allemaal wel tegenwoordig, ongeacht OS).

[ Voor 3% gewijzigd door crisp op 04-06-2005 15:29 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

(jarig!)
crisp schreef op zaterdag 04 juni 2005 @ 15:29:
ACM: je bedoelt line-span ipv multi-line ;)
Overigens zal de waarde van een textarea bij een POST altijd \r\n-type newlines bevatten (tenminste, bij browsers die zich aan deze afspraak houden, maar volgens mij doen ze dat allemaal wel tegenwoordig, ongeacht OS).
Nee, het heet toch echt multiline, maar ik gooide wel de werking van multiline (/.../m) en dotall (/.../s) door elkaar.
Pagina: 1