Sie sind nicht angemeldet.

1

Donnerstag, 10. Dezember 2009, 20:21

Artikel mit Hochkomma (') werden nicht gespeichert

Hallo zusammen,

in meiner 3.9.0er Installation ist es mir möglich, einfache Hochkommas (') im Artikel zu verwenden. Sobald der Artikel dieses Zeichen enthält, wird dieser nicht abgespeichert, eine Fehlermeldung erhalte ich auch nicht, der Artikel steht unverändert in der Datenbank.
Das ganze ist auf zwei grundsätzlich verschiedenen Servern (1 x Debian, Apache 2 und 1 x Windows, Apache 1.3) reproduzierbar.

Gruss
Stefan

Werbung

2

Donnerstag, 10. Dezember 2009, 22:55

Weil das Zeichen auch für MYSQL Syntax verwendet wird und hier kein austauschen vor dem abspeichern bzw ausführen des MYSQL Querys stattfindet *schlagt mich wnen ich falsch liege*
Projekte:
  • Anime Modul: 95%

Todo:
  • Musicbase: 0%
  • Anime Addon latest episodes: 0%

Werbung

3

Donnerstag, 10. Dezember 2009, 23:46

Dann sollte man sich das aber mal schnellstens anschauen. Kann ja nicht sein, dass ich der einzige bin, der Hochkommata nutzt :)

Schneller Fix: /admin/inc/edit.inc.php -> ändern ab Zeile 113

Quellcode

1
2
3
4
5
6
7
// SPEICHERN =>

} else if (isset($_GET['action']) && $_GET['action'] == "speichern") {
	
	if (!isset($_GET['id'])) {
		
		// NEW SAVE =>


ändern nach

Quellcode

1
2
3
4
5
6
7
8
9
// SPEICHERN =>

} else if (isset($_GET['action']) && $_GET['action'] == "speichern") {
	
	$_POST['pages_inhalt'] = str_replace("'", "\'", $_POST['pages_inhalt']);
	
	if (!isset($_GET['id'])) {
		
		// NEW SAVE =>


Ich weiss aber nicht, welche Tragweite das hat. Auf den ersten Blick funktioniert's aber erstmal.

Gruss
Stefan

Werbung

4

Freitag, 11. Dezember 2009, 13:44

Man könnte auch mit der von php mitgelieferten Funktion addslashes() arbeiten http://de2.php.net/addslashes
Man sollte sowieso alle Benutzereingaben vernünftig escapen

Werbung

5

Freitag, 11. Dezember 2009, 14:06

Man könnte auch mit der von php mitgelieferten Funktion addslashes() arbeiten http://de2.php.net/addslashes
Man sollte sowieso alle Benutzereingaben vernünftig escapen


Da muss ich leider widersprechen. Für SQL-Statements sollte die MySQL eigene Funktion mysql_real_escape_string() verwendet werden. Dies hat den
Vorteil, dass die Backslashes nach dem Speichern wieder gelöscht werden, was bei addslashes() nicht der Fall ist.

Und pauschal zu sagen, man sollte immer eine Maskierungsfunktion benutzen, ist in meinen Augen nicht ganz korrekt. Hochkommata können ja
entweder zur Kennzeichnung von Attributen benutzt werden oder aber als Textkomponente. Beim ersteren ist es richtig, dass es maskiert werden muss, beim
zweiten aber sollte es in die HTML-Entität umgewandelt werden. (Auf jeden Fall bei dem vom cms2day verwendeten Charset).

Dafür kann man eigentlich den TinyMCE gut verwenden .. Gibt man in der HTML-Ansicht in Hochkomma ein, sollte dieser geparsed werden und wenn man es
in der "GUI"-Ansicht eingibt, sollte es in die HTML-Entität umgewandelt werden. In der Theorie sollte es, meines Erachtens, so gemacht werden ...

Werbung