[PHP] Regels variable uitlezen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hello,

Is het mogelijk van een post de regels stuk voor stuk uit te lezen en in variabelen te stoppen. Als je dus een verhaaltje hebt van:

code:
1
2
3
Hello, hoe is het?
Met mij gaat alles goed.
Mooi met mij ook.


dat het script dan:
code:
1
2
3
$var[0] = Hello, hoe is het?
$var[1] = Met mij gaat alles goed.
$var[3] = Mooi met mij ook.


Zat zelf te denken aan
PHP:
1
 <?php $var = split("?", $tekst); ?> 
maar dan weet ik niet wat ik op de plaats van het vraagteken in moet vullen.
Wie weet die wel, of heeft een andere manier?

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

PHP:
1
 <?php $var = split("\n", $tekst); ?> 


:?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Oh ja tuurlijk 8)7 DOM...

sorry voor deze onnozele vraag. |:(

zat weer eens te slapen :z

hij mag dicht

Acties:
  • 0 Henk 'm!

Verwijderd

Erkens schreef op 28 December 2002 @ 10:51:
PHP:
1
 <?php $var = split("\n", $tekst); ?> 


:?
PHP:
1
 <?php $var = split("\n\r", $tekst); ?> 

O-)
sommige browsers kennen de \n niet, dus daarom ook de \r meegeven.

Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 18-09 14:09

Kaastosti

Vrolijkheid alom!

Maar dan moet je tekst in eerste instantie dus al in een variabele zitten... of je moet de gehele tekst neerzetten ipv $tekst. Het resultaat is echter wel hetzeflde, die array $var[] :)

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

KingOfDos:
PHP:
1
 <?php $var = split("\n\r", $tekst); ?> 

O-)
sommige browsers kennen de \n niet, dus daarom ook de \r meegeven.

Als er dus geen \r meegegeven wordt door de browser, dan gebeurt er dus niets, dus dit is ook geen oplossing...

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Tom-Eric
  • Registratie: Oktober 2001
  • Laatst online: 25-03 09:11
PHP:
1
2
3
4
<?
$tekst = str_replace("\r", "\n", $tekst);
$var = explode("\n", $tekst);
?>

Dat zou het dan op moeten lossen!
Van PHP.net
Note that if you don't require the power of regular expressions, it is faster to use explode(), which doesn't incur the overhead of the regular expression engine.

[ Voor 62% gewijzigd door Tom-Eric op 28-12-2002 14:18 ]

i76 | Webdesignersgids | Online Gitaarlessen & Muziekwinkels


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Je vergeet dat als je \r vervangt door \n, "\r\n" dus \n\n wordt. Je krijgt dan witregels die er oorspronkelijk niet waren.

Beter kun je gewoon exploden op "\n", vervolgens array_walk met rtrim (), en bij rtrim () als 2e argument "\r".

zie: rtrim () en array_walk ()

Overigens vraag ik me af of dat nodig is... Ik weet niet wat daarover in de HTTP specificaties staat, maar ik heb zo'n vermoeden dat 't verschil in endlines (win/mac/linux) wel afgevangen wordt in de HTTP specs.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
ik weet niet of er ook browsers zijn die CRLF gebruiken om regels te scheiden; als dat zo is, werkt bovenstaande methode niet goed: je krijgt dan eerst
code:
1
Hello, hoe is het?\n\nMet mij gaat alles goed.\n\nMooi met mij ook.
en dit wordt dan waarschijnlijk na de explode
code:
1
2
3
4
5
$var[] = 'Hello, hoe is het?';
$var[] = '';
$var[] = 'Met mij gaat alles goed.';
$var[] = '';
$var[] = 'Mooi met mij ook.';
;
misschien kan iemand dit even controleren?
als dit het geval is, kun je misschien preg_split() gebruiken.

[ Voor 7% gewijzigd door Apollo_Futurae op 28-12-2002 14:35 . Reden: gamma ]

Pas de replâtrage, la structure est pourrie.


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

edit:
gamma(7%)
:P

PHP:
1
2
3
4
5
<?
$str = "1\n\n3"; 

var_dump ( explode ( "\n", $str ) );
?>
output:
code:
1
2
3
4
5
6
7
8
array(3) {
  [0]=>
  string(1) "1"
  [1]=>
  string(0) ""
  [2]=>
  string(1) "3"
}

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

En de Mac's zullen wel weer \r als linebreak hanteren, en IBM heeft ook een eigen newline char, althans, dat bleek een tijdje terug, toen er kabaal kwam omdat XML 1.1 die character ook wil accepteren als linebreak character. Daarom denk ik dat een split op het volgende het mooist is:

\x0D\x0A|\x0D\x85|\x0D|\x0A|\x85

Hierin is \x0D een carriage-return (\r), \x0A is een line-feed (\n), en \x85 een NEL character, de IBM newline dus.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Wat je ook kunt doen is:
PHP:
1
2
$newline=nl2br("\n");
vardump( explode($newline,nl2br($var)) );

Dan weet je (mits html niet teogestaan is in de var) zeker dat het goed komt :)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • ThaDaNo
  • Registratie: Mei 2002
  • Laatst online: 05-04-2023
Grr dat had ik toenstrax bedacht, toen had ik geen internet beschikbaar, kom ik hierheen om het te posten.. grr :P
Pagina: 1