Andreas: Zeichen & in Variable übertragen ?

Hallo,
ich habe eine Seite in der eine Variable vorhanden ist und immer mit übertragen wird. $vari
Nun reicht diese nicht mehr aus und ich benötige eine zweite Variable aber bevor ich alle Seiten umschreiben muß hatte ich eine Idee, funktioniert nur nicht bei mir.
$vari = $vari&zweitevari=1
Ausgelesen wird auf der nächsten Seite so: /?vari=$vari

Gibt es eine Möglichkeit wie ich in einer Variable zwei Variablen  übertragen kann? Das Problem liegt daran das das & -Zeichen als Variable erkannt wird, soll es aber nicht.

MfG. Andreas

PS. Ist etwas kompliziert erklärt aber ist auch schwer zu erklären.

  1. Hallo,

    ich habe eine Seite in der eine Variable vorhanden ist und immer mit übertragen wird. $vari
    Nun reicht diese nicht mehr aus und ich benötige eine zweite Variable aber bevor ich alle Seiten umschreiben muß hatte ich eine Idee, funktioniert nur nicht bei mir.
    $vari = $vari&zweitevari=1
    Ausgelesen wird auf der nächsten Seite so: /?vari=$vari

    Ich nehme an, Du willst einen Query-String (bzw. search-String) für einen URI erstellen.

    $URL = "http://www.sample.tld/";
    $vari = "Hallo";

    Wie würdest Du hieraus nun
    "http://www.sample.tld/?vari=Hallo"
    bekommen?

    Auf dem selben Weg kannst Du dann auch noch den String "&zweitevari=1" dranhängen.

    Stichworte: String, Textverkettung

    viele Grüße

    Axel

    1. Hallo,

      Auf dem selben Weg kannst Du dann auch noch den String "&zweitevari=1" dranhängen.

      Sorry, natürlich den String '&zweitevari=1'.

      Stichworte: String, Textverkettung

      http://de3.php.net/manual/en/language.types.string.php
      http://de3.php.net/manual/en/language.operators.string.php

      viele Grüße

      Axel

    2. Hallo,
      genau das funktioniert halt nicht da das & Zeichen als Variable ausgelesen wird, dieses soll aber als Zeichen übertragen werden.

      Beispiel:
      $abc=1;
      $abc = $abc."&text=2";
      Setze ich nun einen Link http://www.url/?abc=$abc erscheint http://www.url/?abc=1

      Das & wird als Variable gewertet und diese ist nicht vorhanden. Der Link der erscheint soll aber so aussehen: http://www.url/?abc=1&text=2

      Andreas

      Wie würdest Du hieraus nun
      "http://www.sample.tld/?vari=Hallo"
      bekommen?

      Auf dem selben Weg kannst Du dann auch noch den String "&zweitevari=1" dranhängen.

  2. Moin!

    PS. Ist etwas kompliziert erklärt aber ist auch schwer zu erklären.

    Nein, es ist unverständlich erklärt, und das liegt daran, dass du das Problem noch nicht komplett verstanden hast. Dementsprechend kriegst du keine Lösung hin.

    Aber mal von Anfang an:

    ich habe eine Seite in der eine Variable vorhanden ist und immer mit übertragen wird. $vari

    Was steht da drin? Wozu wird die immer mit übertragen?

    Nun reicht diese nicht mehr aus und ich benötige eine zweite Variable aber bevor ich alle Seiten umschreiben muß hatte ich eine Idee, funktioniert nur nicht bei mir.
    $vari = $vari&zweitevari=1
    Ausgelesen wird auf der nächsten Seite so: /?vari=$vari

    Entweder brauchst du tatsächlich eine zweite Variable - dann MUSST du aber alles umschreiben, weil eine zweite Variable eben eine zweite Variable ist, die angelegt, gefüllt, benutzt und ausgegeben werden muß.

    Oder du brauchst KEINE zweite Variable, weil du es schaffst, die zusätzlichen Informationen noch mit in die erste Variable zu quetschen. Trotzdem wirst du dann irgendwo was verändern müssen, denn diese erste Variable wird ja wahrscheinlich doch irgendwo benutzt und ausgewertet, und mindestens an dieser Stelle würden die zusätzlichen Informationen ja stören.

    Gibt es eine Möglichkeit wie ich in einer Variable zwei Variablen  übertragen kann? Das Problem liegt daran das das & -Zeichen als Variable erkannt wird, soll es aber nicht.

    Das &-Zeichen wird garantiert NICHT als Variable erkannt. Diese Formulierung ist faktisch komplett falsch. Das &-Zeichen (in HTML-Links muß man übrigens & schreiben!) dient der Trennung der einzelnen URL-Parameter, egal welche Skriptsprache zur Auswertung kommt. Auch PHP trennt an den & den String hinter dem Fragezeichen in Teile auf und wertet diese einzelnen Teile dann aus und füllt sie in die superglobale (d.h. überall im Skript, auch in Funktionen, erreichbare) Variable $_GET.

    Wenn du also in einen Link "?vari=wertzuweisung&varizwei=andererwert" schreibst, führt dies in PHP automatisch zu:
    $_GET["vari"] = "wertzuweisung";
    $_GET["varizwei"] = "andererwert";

    Wenn du hingegen gerne
    $_GET["vari"] = "wertzuweisung&andererwert" haben willst, mußt du das &-Zeichen als codierten String angeben. Im URL-Parameter werden Zeichen, die Sonderbedeutung haben, und auch die meisten Umlaute und Sonderzeichen, als "%HEXZAHL" codiert. Also ein Prozentzeichen, und dahinter zwei hexadezimale Zahlen, die dem Bytecode des jeweiligen Zeichens entsprechen.

    Soll heißen: Wenn du das &-Zeichen wirklich als Zeichen in die erste Variable übermitteln willst, mußt du in eine ASCII-Tabelle gucken und dort den Hex-Wert für das Zeichen & ermitteln.

    Unter http://de.selfhtml.org/inter/zeichensaetze.htm gibts beispielsweise diese Tabelle:
    <img src="http://de.selfhtml.org/inter/ascii.gif" border="0" alt="">
    Das & steht an Position 38 (dezimal), das kannst du beispielsweise mit dem Windows-Taschenrechner oder diesem kleinen SELF-Helferlein http://de.selfhtml.org/helferlein/dezhex.htm umrechnen in hexadezimal. Ergebnis: 26.

    Also fügst du in deine Links ein:

    ?vari=wert1%26wert2

    Das dumme ist nur: Wenn du mit PHP die Variable vari wieder ausgibst, dann wird %26 schon zurückgewandelt in ein &. Das bedeutet, du mußt die Konvertierung des & in den Hex-Wert immer wieder vollführen.

    Glücklicherweise gibts in PHP dafür die Funktionen urlencode() und rawurlencode(), welche alle in URL-Strings unerlaubten Zeichen in Hex codieren.

    Das aber bedeutet: Überall dort, wo du bislang deine Variable wieder ganz harmlos in den Link geschrieben hast, mußt du die Konvertierung mit urlencode() einfügen.

    Also mußt du doch wieder alles umändern. Da ist es irgendwie mit Sicherheit leichter, lieber eine zweite Variable zu benutzen - zumal du die dann auch echt unabhängig benutzen kannst, denn wenn du alles in eine quetschst, mußt du die beiden darin enthaltenen Werte natürlich vor der Bearbeitung noch irgendwie trennen - ansonsten würde das ja nicht funktionieren.

    Und noch etwas: Wenn du tatsächlich einen vom Benutzer irgendwann einmal ausgewählten Wert ständig zu allen weiteren besuchten Seiten dieses Besuchers weiterleiten willst, solltest du dich dringend mal mit den Sessions in PHP vertraut machen. Damit hättest du nämlich all deine Probleme mit dieser zweiten Variablen nicht gehabt - du hättest sie einfach benutzt, und gut.

    - Sven Rautenberg

    1. Hallo,
      vielen Dank für die Mühe mir das genauer zu erklären.

      Mit dem Hex-Wert zur Übertragung des & Zeichens funktioniert das nun perfekt. Die zweite Variable soll nur auf den Unterseiten genutzt werden und wird jetzt auch Ordnungsgemäß ausgegeben.

      Als ich die Seite erstellte habe ich gerade mit PHP angefangen und mir über spätere Änderungen noch keine Gedanken gemacht. Jetz wo so langsam die Probleme auftreten schreibe ich meine Scripte von Anfang an anders. :)

      MfG. Andreas