[PHP] ^M achter array waardes, str_replace

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • m33p
  • Registratie: September 2002
  • Laatst online: 05-09 15:26
Hallo,

Ik lees een file uit waarin gebruikers staan, daar voeg ik een nieuwe gebruiker aan toe en dan schrijf ik dit weg. Dit werkt bijna perfect... Ik haal is alles wat in dat bestand staat op en die zet ik in een array. Dan schrijf ik de eerste regel van die array weg, dan de nieuwe data, en dan de rest van de oude data daar weer achteraan.

Nu wordt er bij de data uit de array steeds achter elke regel "^M" gezet. Dit is alleen bij de data uit de array, dus ik dacht, dat filteren we er mooi even uit. Nou mooi niet dus. Ik probeer het als volgt:

PHP:
1
2
3
4
5
6
7
8
9
10
$bestandsnaam = "users.cfg";
$gegevens = file($bestandsnaam);

$aantal = count($gegevens);

$i = 0;
while ($i < $aantal) {
    $gegevens[$i] = str_replace("^M", "", $gegevens[$i]);
    $i++;
}


Maar er wordt helemaal niks gefilterd. Iemand enig idee wat ik fout doe en of ik dit beter / makkelijker kan doen?

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Die ^M is geen ^M maar een \n (een newline character dus)
Each element of the array corresponds to a line in the file, with the newline still attached.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Dat komt doordat dit een zgn control character is wat ontstaat zodra bestanden van Windows>Unix worden getransferred zonder correcte omzetting; je moet dus even kijken naar het bestand wat je uitleest; en hoe je dit op de *nix webserver zet :)

edit:
echo a^Msdfc |perl -pe 's/\015\012/\n/g'
:)

[ Voor 50% gewijzigd door Spider.007 op 10-12-2003 19:11 ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • pjonk
  • Registratie: November 2000
  • Laatst online: 16-09 20:14
Zie niet direct wat je fout doet, maar dit kan in ieder geval makkelijker.

PHP:
1
2
3
4
5
while ($i < $aantal) { 
    $gegevens[$i] = str_replace("^M", "", $gegevens[$i]); 
    $i++; 
}
?> 


kan vervangen worden door:

PHP:
1
2
$gegevens = str_replace("^M", "", $gegevens); 
?> 


PHP.net manual bij www.php.net/str_replace
If subject is an array, then the search and replace is performed with every entry of subject, and the return value is an array as well.

It’s nice to be important but it’s more important to be nice


Acties:
  • 0 Henk 'm!

  • m33p
  • Registratie: September 2002
  • Laatst online: 05-09 15:26
@.oisyn:
Bedankt, ik ga het even proberen

@JonkieXL:
Meende ergens gelezen te hebben dat str_replace niet op de hele array werkte maar alleen op de eerste waarde

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

.oisyn schreef op 10 december 2003 @ 19:06:
Die ^M is geen ^M maar een /n (een newline character dus)


[...]
Het is officieel het /r character wat vervelend doet; en niet de /n :)

PHP:
1
$gegevens[$i] = str_replace("\r", '', $gegevens[$i]);

[ Voor 75% gewijzigd door Spider.007 op 10-12-2003 19:19 ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Spider.007 schreef op 10 december 2003 @ 19:18:
[...]


Het is officieel het /r character wat vervelend doet; en niet de /n :)
|:( die bedoel ik idd :P

\n = ascii-code 10 = ^J
\r = ascii-code 13 = ^M

(en /r is weer wat anders ;))

[ Voor 8% gewijzigd door .oisyn op 10-12-2003 19:39 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • m33p
  • Registratie: September 2002
  • Laatst online: 05-09 15:26
Het was inderdaad de \r, probleem opgelost :) dank u allen zeer

Acties:
  • 0 Henk 'm!

  • Tux
  • Registratie: Augustus 2001
  • Laatst online: 16-09 19:01

Tux

Het is toch \r en \n .oisyn :P

The NS has launched a new space transportation service, using German trains which were upgraded into spaceships.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

staat er toch ook :+

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1