PHP ' " var-übergabe-problem



  • Hi Leutz,

    ich möchte einen Dateinamen an eine andere Seite übergeben. Der Dateiname steht (ohne Endung) in "$data[Datei]". Eigentlich geht es ja auch, solange der Dateiname keine Leerzeichen hat. Aber wie krieg ich es auch mit Leerzeichen zum Laufen. Man muss doch sicherlich die ' und " anders setzen oder so, wa? Aber ich hab keine Ahnung wie. Hier der Code:

    echo "<a href='player.php?FileName=../../music-archiv/$data[Datei].mp3' target='player'>$data[Songtitel]</a>";
    

    Ich würde denken, dass bei FileName= noch mal nen Anführungszeichen und hinter .mp3 dann zwei, aber das geht nicht.

    Hoffe ihr könnt mir helfen,
    MFG
    dope_dope


  • Mod

    urlencode()



  • Kann mir mal bitte jemand an nem Beispiel erklären, wie das funktioniert?
    Also hab das hier im internet gefunden:

    echo '<A HREF="mycgi?foo=', urlencode ($userinput), '">';
    

    aber das geht bei meinem beispiel nicht. krieg immer parse error, unexpected '



  • Strings werden mit . verkettet, nicht mit , 😉



  • habs jetzt selber rausgekriegt



  • flenders schrieb:

    Strings werden mit . verkettet, nicht mit , 😉

    Das ist zwar einerseits richtig, ist im aktuellen Zusammenhang aber falsch. Wir reden hier nicht von einer Stringverkettung, sondern von der übergabe mehrerer Parameter an ein Sprachkonstrukt. Wenn Du echo verwendest, dann ist es sogar besser, wenn Du die einzelnen Strings per Kommata trennst, und nicht per Punkt.

    Der Performance-Vorteil der Kommata-Variante ist zwar auf die Sekunde gerechnet nicht grade groß, bei einer relativ großen Anzahl von Stichproben mit relativ langen Strings wird er dann aber doch schon wieder recht signifikant.

    Der Hintergrund ist dabei folgender:

    Nehmen wir an, Du machst folgendes:

    echo 'string1'.'string2'.'string3';

    dann passiert intern

    • Speicher reservieren für "String1" und "String2"
    • Inhalt von String1 und Inhalt von String2 in neuen Speicher bereich kopieren
    • Speicher reservieren für "String1String2" und "String3"
    • Inhalt der beiden Strings in neuen Speicherbereich kopieren
    • Speicher reservieren für lokale Variable im Sprachkonstrukt
    • Den ganzen Schrott in die lokale Variable kopieren
    • Den ganzen Trödel aus der lokalen Variable nach STDOUT kopieren.

    Setzen wir den Aufwand für "ein Byte Speicher reservieren" mal als 1 und den von "1 Byte" kopieren ebenfalls. (Völlig hypothetisch, ich weiß) Außerdem ignorieren wir, daß ein String in PHP weder null-terminiert, noch als Char-Array gespeichert wird, sondern das das ganze etwas mehr Speicher kostet. Zusätzlich nehmen wir an, daß das berechnen der Speichermenge für zwei Strings ebenfalls mit einem Aufwand von 1 zu Buche schlägt.

    Rechnerisch ergibt sich für das Beispiel also folgender Aufwand:

    15 + 14 + 22 + 21 + 21 + 21 + 21 => Aufwand von 135

    Machst Du hingegen aber das hier:

    echo 'string1','string2','string3';

    dann passiert wiederum jenes:

    • Speicher für lokale Variable der größe "string1" reservieren
    • "string1" in lokale Variable kopieren
    • Speicher für lokale Variable der größe "string2" reservieren
    • "string2" in lokale Variable kopieren
    • Speicher für lokale Variable der größe "string3" reservieren
    • "string2" in lokale Variable kopieren
    • Inhalt von "lokale Variable 1" nach STDOUT kopieren
    • Inhalt von "lokale Variable 2" nach STDOUT kopieren
    • Inhalt von "lokale Variable 3" nach STDOUT kopieren

    Unter den oben genannten Hypothesen ergibt sich daraus der folgende Aufwand:

    7 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 7 => Aufwand von 63

    Die zweite Variante hat also nur einen Aufwand von knapp 47% der ersten Variante. Das stimmt dann IIRC auch in etwa mit den gemittelten Benchmark-Ergebnissen für beide Varianten überein.

    Gruß Jens



  • Vielen Dank für deine Ausführungen - man lernt eben nie aus 😉


Anmelden zum Antworten