Klaus: Code in Datei speichern funktioniert nicht

Hallo,

über eine PHP-Routine errechne ich einen 20 stelligen Code, jede Stelle kann einen Wert von 0 - 255 erhalten.
Nun soll der Code in einer Datei gespeichert werden können.
Hierfür erstelle ich per Javascript ein neues Fenster in dem ich eine weiteres PHP-Script aufrufe und den 20stelligen Code als 20stelligen Char-Code übergebe.
Das Problem ist hauptsächlich, dass anstatt der 20 Zeichen in der Datei, 24 Zeichen stehen. woher kommen die 4 Zeichen und kann ich das verhindern, sodass auch wirklich nur die gewollten 20 Zeichen in der Datei stehen?
Eventuell einen anderen Content-Type wählen?

Aufruf mit Übergabe:

<script language="JavaScript">  
	downloadkey=window.open("", "Download", "width=1024,height=768,left=150,top=150,resizable=no,scrollbars=no");  
	xziel = "dl\_code.php?xcode='<?=$xcode;?>'";  
	downloadkey.location.href=xziel;  
</script>  

Script dl_code.php:

header("Content-Type: text/plain");  
header("Content-Disposition: disposition-type=attachment; filename=\"test.code\"");  
print urldecode($\_GET["xcode"]);
  1. Was für Zeichen stehen denn zusätzlich drin?
    Du solltest wahrscheinlich den Code in der Zeile
    xziel = "dl_code.php?xcode='<?=$xcode;?>'";
    nicht einfach anhängen, sondern als UrlEncoded anhängen. Vergleich doch mal Soll und Ist, vielleicht siehst du dann schon selber was da nicht passt.

    1. Sorry, ich hab ja nicht den ganzen Quelltext gepostet.
      Ein $xcode = urlencode($xcode); steht natürlich schon noch davor ;-)

      Soweit ich erkennen kann, werden jeweils 2 Zeichen an den Anfang und 2 ans Ende meines Codes gehangen: 5C 27

      1. Hi!

        Soweit ich erkennen kann, werden jeweils 2 Zeichen an den Anfang und 2 ans Ende meines Codes gehangen: 5C 27

        Und hast du mal nachgeschaut, was das für Zeichen sind, wenn man diese Bytes dekodiert?

        Lo!

      2. Hi,

        Soweit ich erkennen kann, werden jeweils 2 Zeichen an den Anfang und 2 ans Ende meines Codes gehangen: 5C 27

        Also ' auf gut Deutsch.

        Für das Hochkomma bist du selber veranwortlich, weil du es bei der Übergabe des Parameters unsinnigerweise einbaust - lerne bitte, mit Strings in PHP umzugehen.

        Und der Backslash kommt dann wohl von aktivierten magic_quotes_gpc.

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. Also ' auf gut Deutsch.

          Für das Hochkomma bist du selber veranwortlich, weil du es bei der Übergabe des Parameters unsinnigerweise einbaust - lerne bitte, mit Strings in PHP umzugehen.

          Vielen Dank für den Hinweis.
          Nachdem ich die Hochkommata entfernt habe, ist auch das andere Zeichen verschwunden.
          Jetzt passt alles.

          Und der Backslash kommt dann wohl von aktivierten magic_quotes_gpc.

          1. Hi!

            Nachdem ich die Hochkommata entfernt habe, ist auch das andere Zeichen verschwunden.
            Jetzt passt alles.

            Nein, denn ...

            Und der Backslash kommt dann wohl von aktivierten magic_quotes_gpc.

            ... das Feature Magic Quotes, das dir eben schon als Nebenwirkung negativ auf die Füße gefallen ist, wird dir noch für anderen Kummer sorgen. Deaktiviere es lieber, denn es ist sowieso veraltet. Anschließend solltest du dich über das Prinzip des Kontextwechsels informieren, denn das war die Ursache des eigentlichen Problems.

            Lo!

            1. Moin!

              ... das Feature Magic Quotes, das dir eben schon als Nebenwirkung negativ auf die Füße gefallen ist, wird dir noch für anderen Kummer sorgen. Deaktiviere es lieber, denn es ist sowieso veraltet.

              Irgend jemand sollte erwähnen, dass er VORHER alle seine Skripte darauf prüfen muss, ob diese ohne Magic Quotes noch wie erwartet funktionieren UND sicher sind.

              MFFG (Mit freundlich- friedfertigem Grinsen)

              fastix

              1. Hi!

                ... das Feature Magic Quotes, das dir eben schon als Nebenwirkung negativ auf die Füße gefallen ist, wird dir noch für anderen Kummer sorgen. Deaktiviere es lieber, denn es ist sowieso veraltet.
                Irgend jemand sollte erwähnen, dass er VORHER alle seine Skripte darauf prüfen muss, ob diese ohne Magic Quotes noch wie erwartet funktionieren UND sicher sind.

                Ja, der nachfolgende Verweis auf den Kontextwechsel-Artikel, der die Problematik beleuchtet, sollte dafür das nötige Wissen liefern.

                Lo!

                1. Hallo,

                  Irgend jemand sollte erwähnen, dass er VORHER alle seine Skripte darauf prüfen muss, ob diese ohne Magic Quotes noch wie erwartet funktionieren UND sicher sind.

                  Ja, der nachfolgende Verweis auf den Kontextwechsel-Artikel, der die Problematik beleuchtet, sollte dafür das nötige Wissen liefern.

                  Kennst Du eigentlich den Unterschied zwischen "implizit" und "explizit"?

                  Besondere Grüße
                  Explizit

  2. Hallo,

    über eine PHP-Routine errechne ich einen 20 stelligen Code, jede Stelle kann einen Wert von 0 - 255 erhalten.
    Nun soll der Code in einer Datei gespeichert werden können.

    Das geht mit den pack()-Funktionen von PHP.
    http://de.php.net/manual/en/function.pack.php

    Da PHP sonst eine Umwandlung vornimmt und die Digit-Chain als bytecodierten String darstellt, müsstest Du gezielt das passende Speicherformat auswählen.

    Hierfür erstelle ich per Javascript ein neues Fenster in dem ich eine weiteres PHP-Script aufrufe und den 20stelligen Code als 20stelligen Char-Code übergebe.

    Das bedeutet dann aber, dass Du nun schon drei Probleme hast. Eben war es noch "nur eins". Warum willst Du die Digits erst zum Client transportieren, um sie dort wieder aufwändig umzurechnen und dann wieder zum Server zu schaffen. Für den Übermittlungsweg in der URL müssen sie auch noch passend codiert werden.

    Das Problem ist hauptsächlich, dass anstatt der 20 Zeichen in der Datei, 24 Zeichen stehen. woher kommen die 4 Zeichen und kann ich das verhindern, sodass auch wirklich nur die gewollten 20 Zeichen in der Datei stehen?

    "Nachschauen" ist sicherlich ein passender Tip. Allerdings geht das nur sinnvoll mit einem Hex-Editor.

    Grüße
    Robert