fachinformatiker
Goto Top

Falsche Ausgabe der Variablen oder Echo

Hallo Administratoren und erfahrene Programmierer,
Ich habe gerade ein sehr seltsames Problem:

ich möchte einfach einen String mit Variablen zurückgeben, der Source:
echo "<a href='$PHP_SELF?sort=n";  
if (isset($who))
{echo "&who=$who";}  
if (isset($suche))
{
echo"&suche='$suche'";  
echo "&nachname='$nachname'";  
echo"&Vorname='$Vorname'";  

Ich bekomme als Ausgabe aber zurück:
<a href="/htmlneu/intranet/intern/kontakt.php?sort=n&amp;who=p&amp;suche=" 1="" &vorname=""  

Zur weiteren Fehlersuche: $suche ist hier auch "1"(ohne Anführungszeichen).

Seit einigen Stunden quälen mich die Fragen:
Wo ist der Nachname ? (Ist in diesem Fall auch ein Leerstring)
Und warum gibt er mir soviel zurück, was ich nicht geschrieben habe wie &amp; ? Und warum steht vor suche kein & ?

Ich verstehe diese Rückgabewerte von PHP in diesem Fall überhaupt gar nicht, aber deswegen habe ich gerade große Probleme, kann mir hier jemand helfen ? Wäre sehr nett.

Mit freundlichen Grüßen,
fachinformatiker

Content-ID: 59547

Url: https://administrator.de/contentid/59547

Ausgedruckt am: 22.11.2024 um 05:11 Uhr

AndreasHoster
AndreasHoster 22.05.2007 um 16:32:50 Uhr
Goto Top
Ich kann zwar kein PHP, aber wenn man HTML kennt, weiß man, daß &amp; das Kürzel für ein & (im englischen Ampersand genannt) ist.
Damit kann ich nur Schlußfolgern, daß PHP in HTML Syntax nicht erlaubte Zeichen umkodiert also & -> &amp;
Soviel zum Verstehen. Jetzt darfst Du suchen, wie man PHP von der automatischen Umkodierung abbringt.
48482
48482 22.05.2007 um 21:30:22 Uhr
Goto Top
Hallo fachinformatiker,

das Problem sind die einfachen Anführungszeichen. Diese Zeichen ( ' ) haben, wie die doppelten Anführungszeichen, eine besondere Bedeutung in PHP.

Indem man diese Zeichen mit einem Backslash escaped, verhindert man dieses Verhalten, der Code müsste also korrekt so aussehen:

echo "<a href=\'$PHP_SELF?sort=n";  
if (isset($who))
{echo "&who=$who";}  
if (isset($suche))
{
echo"&suche=\'$suche\'";  
echo "&nachname=\'$nachname\'";  
echo"&Vorname=\'$Vorname\'";  

Mit freundlichen Grüßen,
Pixelwarp
fachinformatiker
fachinformatiker 23.05.2007 um 11:55:14 Uhr
Goto Top
Also der neue Quelltext:
<source>
echo "<a href=\'$PHP_SELF?sort=n";
if (isset($who))
{echo "&who=$who";}
if (isset($suche))
{
echo"&suche=\'$suche\'";
echo "&nachname=\'$nachname\'";
echo"&Vorname=\'$Vorname\'";
</source>
Die neue Ausgabe:
<schnipp>
<a href="%5C%27/htmlneu/intranet/intern/kontakt.phpsort=n&amp;who=p&amp;suche=%5C%271%5C%27&amp;nachname=%5C%27%5C%27&amp;Vorname=%5C%27%5C%27&amp;
</schipp>
Die Gleichheitszeichen an den falschen Stellen sind weg, aber &amp; steht immernoch da und er scheind die ' und die \ mitsamt den Variableninhalten in einen Hexcode zu übersetzen. Das ist nicht das, was ich wollte.

Trotzdem Danke schonmal für die Hilfen an AndresHoster und Pixelwarp.


Wenn ich die ' wegmache, kommt übrigens in der Ausgabe auch das &amp; was gegen das Konvertieren meines eingegebenen Textes spricht. Aber so ist dann ansonsten die Ausgabe ganz OK (falls keiner die Variablen in der URL editiert...)

Ich finde das SEHR merkwürdig !

Hat noch jemand eine Idee ?
GerberGudrun
GerberGudrun 04.06.2007 um 11:01:44 Uhr
Goto Top
Hallo.

Wenn du eine Variable an ein String anfügen willst so kannst du mit Punkten arbeiten.
Schau dir dazu mal folgenden Code an:

$who = "wer";  
$suche = "1";  
$nachname = "nm";  
$Vorname = "vn";  
echo "<a href=\"$PHP_SELF?sort=n";  
if (isset($who))
{
	echo "&amp;who=".$who;  
}
if (isset($suche))
{
echo "&amp;suche=".$suche;  
echo "&amp;nachname=".$nachname;  
echo "&amp;Vorname=".$Vorname;  
echo "\">Text</a>";  
}

Gruß