Seite 1 von 1

probleme mit codierung

Verfasst: Mittwoch 17. Oktober 2007, 00:25
von Costi
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 :cry:

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..... :lol:

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 / (&nbsp)+/ ?


NCHMAL EDIT:
ohh man, dieser beitrag wurde ziemlich kryptisch, ich hoffe ihr koents verstehen

Re: probleme mit codierung

Verfasst: Mittwoch 17. Oktober 2007, 01:27
von Leonidas
Costi hat geschrieben:wasn jetzt los?
ist cgi.escape schlampig, oder kommt `MySQLdb` nicht mit der datenbank codierung (UTF-8 ?) klar...
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.
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.
Costi hat geschrieben:EDIT:
und warum escaped cgi.escape eigentlich nicht / ( )+/ zu / (&nbsp)+/ ?
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 ``&auml;``.

Verfasst: Mittwoch 17. Oktober 2007, 02:02
von Costi
juhu, jetzt klapts

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 ``&auml;``.
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 `&nbsp;` zu ersetzen.
weil diese mehrere leerzeichen sonst als nur eines angezeigt werden

Verfasst: Mittwoch 17. Oktober 2007, 04:05
von Leonidas
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 `&nbsp;` zu ersetzen.
weil diese mehrere leerzeichen sonst als nur eines angezeigt werden
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.

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.

Re: probleme mit codierung

Verfasst: Mittwoch 17. Oktober 2007, 07:26
von jens
Costi hat geschrieben:oder kommt `MySQLdb` nicht mit der datenbank codierung (UTF-8 ?) klar...
Schau dir mal das an: [wiki]MySQLdb troubleshooting[/wiki]

Verfasst: Donnerstag 18. Oktober 2007, 06:55
von mitsuhiko
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.
Non-Breaking-Spaces sind ein Hack. Der bessere Weg ist es "white-space: pre" zu setzen oder xml:space="preserve" wenn man XHTML nutzt.

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.