PHP str_replace findet CR+LF nicht

grüß Euch,
diesmal bin ich echt ratlos.
der titel sagts: in PHP findet str_replace einen (mehrere) zeilenvorschu(e)b(e) nicht, genauer gesagt: ersetzt sie nicht.

zum code:

vom arduino-webserver kommt folgendes:

client.println (sensorReading);

am client-PC (apache, PHP-code):

$AusgabeArray = file($server);	//arduino, http://IP-adresse
for ($i=3; $i<9; $i++)         //die zellen [0], [1] und [2] sind HTML-code, der vom arduino webserver geliefert wird!
{
   $ADCwerteArray[$i-3] = $AusgabeArray[$i];
}
$DatensatzString = implode(";", $ADCwerteArray);	// im CSV-format ausgeben
str_replace("\r\n","",$DatensatzString);		// CR+LF entfernen; chr(13), chr(10): alles probiert!
.
.
fwrite($ADC_log, $DatensatzString);

output ADC_log-datei (notepad++, word):

2012-09-25;17:26;1023
;1023
;753
;590
;468
;0

steuerzeichen: CR+LF (werden als solche ausgewiesen)

output browser (IE), phpDesigner (debug):

1023 ;1023 ;753 ;590 ;468 ;0

ratlos deswegen, weil ich
1.alles kontrolliert hab, vor allem:
$position = strpos($DatensatzString, "\r\n"); findet! die zeilenvorschübe an der richtigen stelle!
2. nicht nur ASCII-code dezimal, sondern auch hex hab suchen lassen.

wer weiß bitte was?
danke,
Marcel

Verwende anstatt str_replace => trim

http://php.net/manual/de/function.trim.php

Ich vermute mal, es wird kein CR+LF gesendet, sondern NUR ein Newline (Char '\n'). Daher findet str_replace das auch nicht. Hast Du Dir die gelieferten Daten mal als HEX ausgeben lassen?

Hi,

  1. Überlegung:
$find   = array("\r\n", "\n", "\r");
str_replace($find,"",$DatensatzString);

Damit sollstest du jede Variation von CR/LF erwischen.

  1. Überlegung:
    str_replace ist case-sensitiv, probier stattdessen mal str_ireplace

  2. Überlegung:
    sicher daß da "\r\n" kommen und nicht etwa simple html
    ?

Grüßle Bernd

grüß und danke Euch,
der reihe nach:
Jomelo:
trim, rtrim, alles.

mkl0815:
HEX: nein, noch nicht. muss ich erst lernen :slight_smile:

BerndJM:
ALLES ausprobiert, das ergebnis im anhang.
ein screenshot vom phpDesigner, nach durchlaufen der for-schleife (array-auslesen).

ich wiederhole: strpos FINDET "\r\n" an der richtigen stelle, str_replace (genauso str_ireplace) stellen sich blöd.
nächste runde: hexausgabe lernen.
ich meld mich.
lg
Marcel

ergänzung...
HEXEDIT des strings $DatensatzString (anlage):
bestätigt, dass das wirklich echte CR/LF sind.
jetzt probier ich, beliebige zeichen (z.B. "1023") herauszulöschen bzw error-meldungen einzubauen.

prinzipiell könnte ich ja den arduino gleich mit client.print (plus ";" für CSV) statt println ausgeben lassen, aber es.kann.ja.nicht.sein, dass er mich anspinnt :slight_smile:

grüße...
Marcel

DatensatzString hexedit.JPG

schäm.
2 tage sinnlos verpfeffert, Euch und mir die zeit gestohlen aus schlamperei:
str_replace("\r\n","",$DatensatzString);
muss natürlich heissen $DatensatzString = str_replace("\r\n","",$DatensatzString);
...und funktioniert (natürlich).

tschuldigung und ende.
Marcel

Jo... macht Sinn. :slight_smile: