Seite 1 von 1

[CON-1792]: Backslashes gehen verloren

Verfasst: Di 11. Mär 2014, 23:00
von derernst
Hallo Forum

Ob das jetzt ein Bug in 4.9.3 ist oder ein Feature, kann ich nicht sagen - aber es fällt mir auf, dass zumindest im Input von Modulen Backslashes in Javascript-Code verloren gehen. So funktionieren beispielsweise folgende Konstrukte nicht mehr, die ich haufenweise noch in 4.9.1 verwendet habe:

Code: Alles auswählen

echo "<a href='[...]' onClick='return loeschen(\'" . $name . "\')'>[x]</a>";
Das muss ich umständlich ändern in:

Code: Alles auswählen

$str = 'return loeschen("' . $name . '")';
echo "<a href='[...]' onClick='" . $str . "'>[x]</a>";
Oder bei:

Code: Alles auswählen

echo "<script type='text/javascript'>";
echo "\nfunction loeschen(nme) {";
echo "\nreturn window.confirm('Wollen Sie ' + nme + ' wirklich löschen?');";
echo "\n}</script>";
gehen die \ weg, die n bleiben. Natürlich braucht es die Newlines an sich nicht, Abstände reichen auch - aber wenn das Modul schon geschrieben ist, wirds mühsam, bis überall die Fehler gefunden sind.

Wenn man es weiß, kann man den Code entsprechend umschreiben, aber es ist natürlich umständlich. Insbesondere wenn man viele oder umfangreiche Module mit solchen Konstrukten im Einsatz hat, sollte man sich ein Upgrade von 4.9.1 auf 4.9.3 gut überlegen.

Re: Backslashes von escapten Quotes in JS gehen verloren

Verfasst: Mi 12. Mär 2014, 00:37
von homtata
Das hat mit Sicherheit auch in 4.9.0 schon nicht funktioniert, das war einer der Gründe, warum ich die frühere ArticleListAdvanced so massiv umgeschrieben habe - die eingebundenen Javascripte (noch dazu verschachtelt) wollten mit den Escapes und diversen Hochkommakonstrukten einfach nicht mehr funktionieren.
Ob das jetzt so gewollt ist oder ein Kollateralschaden der Neuprogrammierung? Keine Ahnung ;-)
Ich baue für meine Module die Inputbereiche inzwischen komplett anders, angelehnt an das, was ich z.B. beim XML-Sitemap-Modul vorgefunden habe...

Re: Backslashes von escapten Quotes in JS gehen verloren

Verfasst: Mi 12. Mär 2014, 19:56
von derernst
homtata hat geschrieben:Das hat mit Sicherheit auch in 4.9.0 schon nicht funktioniert
Das kann ich nicht bestätigen. Ich habe in einer 4.9.1-Installation die folgende Zeile, die funktioniert:

Code: Alles auswählen

echo "<button type='button' onClick='self.location.href=\"" . $_SERVER['PHP_SELF'] . "?" . Allgemein::implodeGetvars($qsvars, false) . "\"'>Abbrechen</button>";
Und auch das geht da:

Code: Alles auswählen

    echo "<script type='text/javascript'>";
    echo "\nfunction loeschen(nm) { return window.confirm('Wollen Sie ' + nm + ' unwiderruflich löschen?'); } "; 
    echo "</script>";
Diese beiden Konstrukte \" und \n gehen in 4.9.3 nicht.

Danke für den Hinweis auf das XML-Sitemap-Modul - sieht sehr aufgeräumt aus, das muss ich unbedingt näher anschauen.

Re: Backslashes von escapten Quotes in JS gehen verloren

Verfasst: Fr 14. Mär 2014, 15:44
von mischa.holz
Das ist in der Tat ein sehr merkwürdiges (und nicht erwünschtes) Verhalten.

Ich hab dafür mal ein Ticket (https://issues.contenido.org/browse/CON-1792) erstellt und werde mir das genauer ansehen ^.^

Re: [CON-1792]: Backslashes gehen verloren

Verfasst: Do 20. Mär 2014, 11:24
von frederic.schneider_4fb
Das Problem hat der Kolege übrigens behoben, in Version 4.9.4 sollte es also nicht mehr auftauchen. Die Entwicklerversion könnt Ihr hier "ziehen":
https://git.contenido.org

Verändert wurden folgende beiden Dateien:
  • contenido/includes/include.pretplcfg_edit_form.php
  • contenido/includes/include.tplcfg_edit_form.php