Hallo,
echo 'var buecher = new Array("' . implode('","', $_SESSION['buecher']) .'");' . PHP_EOL;
Bitte nicht nur meckern, sondern zeigen, wie es geht!
Die saubere Lösung hatte ChrisB schon aufgezeigt, sie lautet JSON.
Was müssen wir also escapen? Das zu diskutieren, wäre doch wünschenswert!
Das kommt auf den Kontext an. Hier ist der Kontext ein JavaScript-String.
In einem JavaScript-String sind die Stringbegrenzer (" bzw. ') sowie Escape-Sequenzen problematisch (\n, \u1234, \123, \x12, \ vor einem Zeilenumbruch…).
Also escapen oder verhindern:
Quotations
Ecapezeichen (Backslashes)
etliche nicht druckbare Zeichen (Steuerzeichen)
geschweifte Klammern (?)
Werte quotieren (!)
Bezeichner quotieren (?)
Das hier alles zu diskutieren ist müßig, weil man es nicht händisch tun muss und auch nicht tun sollte. Beliebige Usereingaben oder Sessiondaten sollte man gar nicht in JavaScript als JavaScript schreiben.
Wenn man sie in HTML einbindet, dann JSON-kodiert in ein Attribut oder in einem unsichtbaren Element, natürlich HTML-kodiert. Am besten vorher mit einem einschlägigen HTML-Sanitizer behandeln.
In einem externen JavaScript sollte man sie nicht unterbringen, denn das kann einfach von einer anderen Site eingebunden werden – und schon sind die Sessiondaten gestohlen. (Gut, man könnte das mit einem POST und einem CSRF-Token absichern, aber wozu der Aufwand.)
Welche Zeichen sind in JavaScript-Bezeichnern zulässig?
Aber ich sehe nicht, was das mit dem Beispielcode zu tun hat.
Da es hier um die Erzeugung von Arrays bzw. Objekten geht, beträfe dies die Elementbezeichner.
Was sind Elementbezeichner? Du meinst Eigenschaftsnamen bei Objekten?
Mir scheint, du verkomplizierst die Sache. Das ist bei sicherheitskritischen Fragen immer gefährlich.
Mathias