ECHO Kommando in PHP Script liefert versteckte Zeichen - Das Classic ASP Gegenstück aber nicht

  • PHP

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von dive26.

    ECHO Kommando in PHP Script liefert versteckte Zeichen - Das Classic ASP Gegenstück aber nicht

    Hallo Leute,

    ich portiere gerade eine kleine Webanwendung von Classic ASP auf PHP.
    Es geht darum, dass ein Gerät (Arduino Code) eine GET-Anfrage mit Parametern schickt und die Webanwendung mit einem einfachen "OK" String antwortet.

    Bei Classic ASP funktioniert das mit <% response.write("OK")%> .

    Bei PHP probierte ich es bereits mit Echo, Print und Die echo 'OK'; mit Anführungszeichen, ohne und auch mit doppelten.

    In Arduino Code rufe ich die "Seite" ab und es sollten lediglich die zwei Zeichen "O" und "K" übermittelt werden.
    Rufe ich die Windows-Server Seite auf, dann passt das.
    Rufe ich aber die PHP-Server Seite auf, dann wird mir zwar "OK" als String in der Debugausgabe angezeigt, aber in Wirklichkeit werden 5 Zeichen übermittelt.
    Nun weiß ich nicht, wo diese 3 unsichtbaren Zeichen herkommen.

    Habt Ihr eine Idee?
    (Ich kann nur auf der PHP Seite Änderungen vornehmen. Die Arduino Seite darf nicht geändert werden - hier sind bereits zu viele Geräte bei Kunden im Einsatz).

    C-Quellcode

    1. // Hier ermittle ich die Länge des Strings in BOPVCommand
    2. int BO_LEN = BOPVCommand.length();
    3. Serial.println("Stringlänge: " + String(BO_LEN));
    4. // Hier wird normalerweise die Funktion wieder verlassen, sobald BOPVCommand den Wert "OK" enthält.
    5. // Im Falle des PHP Servers sind es aber 5 Zeichen.
    6. if (BOPVCommand == "OK") {return;}
    7. Serial.println("BOPV Command nach theoretisch OK: #" + BOPVCommand+"#");


    Die letzte Zeile im Code gibt folgende Debug-Ausgabe: ​BOPV Command nach theoretisch OK: #OK#
    (man sieht nur die 2 sichtbaren Zeichen. Aber es sind 5 Zeichen - daher wurde auch die Funktion nicht mit return verlassen.

    Wie bekomme ich das geregelt, dass die PHP-Seite ausschließlich die 2 Zeichen "OK" sendet, aber keine anderen Zeichen?
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    Hi,

    seltsame Konstellation .. Normalerweise werden auch nur die 2 Zeichen übermittelt. Was ich mir vorstellen kann, ist, dass PHP aus irgendeinem ganz obskuren Grund am Anfang den BOM mit ausliefert, eine Sequenz aus 3 Bytes, und zwar EF BB BF. Konvertiere doch das was von PHP kommt mal in hexadezimale Bytes und schau was raus kommt. Das "OK" sollte "4F 4B" sein, und dann schau mal was die anderen drei sind - vielleicht ja der BOM wie vermutet.
    Ich denke dass die PHP Datei von dem Editor in dem du sie geschrieben hast (Notepad++ vielleicht?) mit dem Zeichensatz "UTF-8 with BOM" gespeichert wurde. Das heißt die 3 BOM Bytes stehen bereits oben ganz am Anfang der Datei (ebenfalls so dass man sie dort nicht sieht).

    Wenn man die PHP Datei in einem Hex Editor öffnet, wird man so sehen, ob da ein BOM ist, siehe Bild:



    Alternativ kannst du in C if (strstr(BOPVCommand , "OK") != NULL) ... nutzen. Das ignoriert das bestehende Problem aber nur, eine Lösung ist das also nicht.

    // EDIT: Schau mal hier codeproject.com/Questions/5945…ngplusinplusHexplusformat mit dem Code könntest du den BOPVCommand prüfen um die einzelnen Bytes zu sehen.
    Hello World

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Link“ ()

    Ich habe das Problem gestern noch lösen können ;) .

    Da ich einfach mit Windows eine neue Textdatei erstellt und diese dann in meineseite.php umbenannt hatte und dort den Code reingeschrieben habe,
    war das php Dokument selbst ein falsches Dateiformat.

    Ich habe es testweise mit dem Editor "Brackets" als neue Datei gespeichert und dann neu hochgeladen. Dann funktionierte es wie erwartet.
    Dürfte also an der Dokumenten-Codierung gelegen haben.

    PS: Wohl exakt das, was @Link beschrieben hat.
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at