• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

escapen

xXxPeterPanxXx

Neues Mitglied
Hallo ich habe ein kleine Problem beim escapen (schätze ich). Den es werden zwei Fehlermeldungen angezeigt:


Warning: Unexpected character in input: '\' (ASCII=92) state=1 in .......on line 14

Parse error: parse error, expecting `','' or `';'' in ........ on line 14

Der Code:
Code:
echo "<li><a href="\".$kategorie_info['name_url']."\".$subkategorie['name_url']."\">".$subkategorie['name']."</a></li>";
2. Kennt ihr einen guten php validator?

Danke im Voraus!
Mfg xXxPeterPanxXx
 
einfach mit invertierten kommata ^^:

PHP:
<?php
echo '<li><a href='.$kategorie_info['name_url']'.\.'$subkategorie['name_url'].'>'.$subkategorie['name'].'</a></li>';
?>

Nils aka XraYSoLo
 
Danke für deine Hilfe.
Muss man Hochkommas nicht auch escapen?
Weil bei mir funktioniert es immer noch nicht . Es erscheint immoment folgende Fehlermeldung:
Parse error: parse error, expecting `','' or `';'' in ........... on line 14

Mfg xXxPeterPanxXx
 
Du musst alle " innerhalb von zwei " escapen, das selbe gilt für ' innerhalb von zwei '. Wenn du nicht durchblickst nimm printf()/sprintf() her.
 
So ich habe jetzt versucht zu escapen aber es klappt nicht ganz. Meines erachtens habe ich alle "und' escaped.
Code:
echo '<li><a href=".$kategorie_info['name_url']".\."$subkategorie['name_url']."\".$subkategorie['name']."\"</a></li>';
 
Code:
echo "<li><a href="\".$kategorie_info['name_url']."\".$subkategorie['name_url']."\">".$subkategorie['name']."</a></li>";
Wenn Du Dein echo mit Anführungszeichen (") schreibst, dann musst Du alle Anführungszeichen, die Du im Text ausgeben willst, escapen (mit Backslash schreiben). Wenn Du Dein echo mit Hochkommas (') schreibst, dann musst Du alle Hochkommas, die ausgegeben werden sollen, escapen.
Der Grund dafür ist ganz einfach: PHP muss ja wissen, wo Dein String zu Ende ist. Beginnst Du diesen mit ", beendest Du ihn auch am nächsten ", das nicht escaped ist.

Der Fehler in oben stehendem Code ist also das Anführungszeichen direkt hinter href. Also stattdessen muss es heißen:
Code:
echo "<li><a href=\"".$kategorie_info['name_url'].$subkategorie['name_url']."\">".$subkategorie['name']."</a></li>";

So ich habe jetzt versucht zu escapen aber es klappt nicht ganz. Meines erachtens habe ich alle "und' escaped.
Nein, natürlich nicht. Jetzt schreibst Du Dein echo mit Hochkommas. Anführungszeichen musst Du nun nicht mehr escapen, dafür alle auszugebenden Hochkommas. Und Du escapest nun einen Punkt, der eigentlich zwei Strings verbinden soll.
Statt:
Code:
echo '<li><a href=".$kategorie_info['name_url']".\."$subkategorie['name_url']."\".$subkategorie['name']."\"</a></li>';
muss es nun heißen:
Code:
echo '<li><a href="'.$kategorie_info['name_url'].$subkategorie['name_url'].'">'.$subkategorie['name'].'</a></li>';

Schau Dir einfach an, was in Deinem Code feste Strings sind. Die müssen bei Variante 1 in " und bei dieser zweiten Variante mit ' eingeschlossen sein (vorne bzw. hinten). Diese Strings verkettest Du mit Deinen Variablen mit dem Punkt. Zwei Variableninhalte verkettest Du auch mit Punkt. Da kommen keine "/' vor, wenn Du nicht dazwischen auch einen festen String ausgeben willst. Da hast Du auch jedesmal was verhauen. Escaped wird nur, wenn innerhalb eines festen Strings das selbe Zeichen vorkommen soll, wie das, mit dem der String vorne und hinten beendet wird.
Code:
echo 'Escape Test mit Hochkomma (\') und Anführungszeichen (")';
echo "Escape Test mit Hochkomma (') und Anführungszeichen (\")";
Der Unterschied zwischen den beiden Schreibweisen ist, ob die Variableninhalte ausgegeben werden sollen oder nicht.
Code:
$variable="bar";
echo "foo$variable"; /* gibt aus: foobar */
echo 'foo$variable'; /* gibt aus: foo$variable */
Alles klar? :-)

Grüße,
-Efchen
 
Zurück
Oben