Sven Rautenberg: Zeichen & in Variable übertragen ?

Beitrag lesen

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