ich schreib gerade eine web app
generell speichere ich daten in meiner mysql db so, wie der benutzer sie eingegeben hat
beim ausgeben werden sie dan cgi.escaped
das klappt bei zeichen wie zb `<>@#&*()` aber bei `ue`[1], `"` und andere, wird statdessen nur sowas wie `ür` (fuer ue) oder ´ (fuer sz) ausgegebn
wasn jetzt los?
ist cgi.escape schlampig, oder kommt `MySQLdb` nicht mit der datenbank codierung (UTF-8 ?) klar...
[1]ich meine das VER... ...spielte `u` mit dem zwei punkten oben.....
ps:
wenn ich per mysql-client die besondere zeichen ausgeben lasse, wird alles richtig anngezeigt, also gespechert wird alles korrekt
danke
EDIT:
und warum escaped cgi.escape eigentlich nicht / ( )+/ zu / ( )+/ ?
NCHMAL EDIT:
ohh man, dieser beitrag wurde ziemlich kryptisch, ich hoffe ihr koents verstehen
probleme mit codierung
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Das Encoding in dem der Text ausgegeben wird, stimmt nicht mit dem Encoding überein, welches der Browser verwendet. Stelle überal UTF-8 ein, dann funktioniert es auch.Costi hat geschrieben:wasn jetzt los?
ist cgi.escape schlampig, oder kommt `MySQLdb` nicht mit der datenbank codierung (UTF-8 ?) klar...
Umlaute haben mit HTML-Escapen gar nichts zu tun, sie sind ja für HTML keine speziellen Zeichen. Das einzige was an ihnen besonders ist, ist dass sie HTML-Entities definiert haben.
Erstens weil es ja nur HTML-Sonderzeichen escapen muss und zweitens: warum sollte es Space mit Non-Breaking Space escapen? Ersetze mal in einer Seite alle Spaces mit Non-Breaking Spaces und guck was passiert. Das ist nicht das selbe, so wie etwa ``ä`` und ``ä``.Costi hat geschrieben:EDIT:
und warum escaped cgi.escape eigentlich nicht / ( )+/ zu / ( )+/ ?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
juhu, jetzt klapts
aber wenn es darum geht text im browser "richtig" formatiert anzuzeigen ist es sicher besser mehr als zwei leerzeichen mit ` ` zu ersetzen.
weil diese mehrere leerzeichen sonst als nur eines angezeigt werden
ich weis nicht ob cgi.escape fuer andere zwecke gemacht wurde.Erstens weil es ja nur HTML-Sonderzeichen escapen muss und zweitens: warum sollte es Space mit Non-Breaking Space escapen? Ersetze mal in einer Seite alle Spaces mit Non-Breaking Spaces und guck was passiert. Das ist nicht das selbe, so wie etwa ``ä`` und ``ä``.
aber wenn es darum geht text im browser "richtig" formatiert anzuzeigen ist es sicher besser mehr als zwei leerzeichen mit ` ` zu ersetzen.
weil diese mehrere leerzeichen sonst als nur eines angezeigt werden
cp != mv
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Nein, wieso sollte es besser sein, zwei Leerzeichen mit Non-Breaking Spaces zu ersetzen? Das ist so als würde man sagen: wenn man mehr als zwei 'ö' hat, sollte man sie mit einem 'ä' ersetzen.Costi hat geschrieben:ich weis nicht ob cgi.escape fuer andere zwecke gemacht wurde.
aber wenn es darum geht text im browser "richtig" formatiert anzuzeigen ist es sicher besser mehr als zwei leerzeichen mit ` ` zu ersetzen.
weil diese mehrere leerzeichen sonst als nur eines angezeigt werden
Nochmal: Ein Leerzeichen ist nicht gleich einem Non-Breaking Space. Zwei Leerzeichen sind also auch nicht zwei Non-Breaking Spaces. Wenn jemand zwei Leerzeichen im Output haben will, dann soll er da Non-Breaking Spaces nutzen, wenn man es ihm nicht ausreden kann. Das heißt aber nicht, dass man nun Leerzeichen mit Non-Breaking Spaces ersetzen soll, weil die Renderer jetzt Bugs hätten, mehr als ein Leerzeichen anzuzeigen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Non-Breaking-Spaces sind ein Hack. Der bessere Weg ist es "white-space: pre" zu setzen oder xml:space="preserve" wenn man XHTML nutzt.Leonidas hat geschrieben:Nochmal: Ein Leerzeichen ist nicht gleich einem Non-Breaking Space. Zwei Leerzeichen sind also auch nicht zwei Non-Breaking Spaces. Wenn jemand zwei Leerzeichen im Output haben will, dann soll er da Non-Breaking Spaces nutzen, wenn man es ihm nicht ausreden kann. Das heißt aber nicht, dass man nun Leerzeichen mit Non-Breaking Spaces ersetzen soll, weil die Renderer jetzt Bugs hätten, mehr als ein Leerzeichen anzuzeigen.
Was das Thema Encoding angeht: MySQL Tabellencharset auf utf8 stellen und eine dazupassende Collation wählen. Dann noch charset="utf8" beim Verbindungsaufba als Parameter übergeben.
TUFKAB – the user formerly known as blackbird