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