Mahlzeit,
Speicher ich einen String in der DB, der...
- .. ein ü enthält
- .. einen Zeilenumbruch enthält
so sieht dieser in der DB folgendermaßen aus:
- .. für ü steht zb ³ da
- .. für den Zeilenumbruch steht alles leer dar (also mit Zeilenumbruch, kann man nicht so gut erkennen.)
zu Fall 1: Womit stellst du fest, was "wirklich" in der DB steht? - Das sieht nämlich sehr danach aus, dass du noch ein Problem mit der Zeichencodierung hast.
Ein kleines ü hat den Zeichencode U+00FC und wird in UTF-8 durch die zwei Bytes C3, BC dargestellt.
Dasselbe ü wird in einer ISO-8859-x-Codierung aber durch das einzelne Byte FC repräsentiert.
Genau dieser Bytewert FC entspricht aber in CP437 (das ist der "eingebaute" Zeichenvorrat von Grafikkarten) dem Symbol ³, das du erwähnst.
Offensichtlich werden deine Daten also in ISO-8859-x an die DB übergeben und eingetragen, ebenso in ISO-8859-x wieder ausgelesen und weiterverarbeitet. Das Tool, mit dem du nachschaust, was "wirklich" in der DB steht, scheint die Daten aber als CP437 (auch "OEM-Zeichensatz" genannt) zu interpretieren.
Zu Fall 2: Da ist mir nicht klar, was du damit sagen willst.
Hole ich es aus der Datenbank und gebe es in meinem Javarogramm aus, steht da:
- .. ü
- .. der Zeilenumbruch
Perfekt.
Weiter: Wenn ich das ganze dann auf der JSP mit c:out ausgebe, sieht es folgendermaßen aus:
- .. ü
- .. kein Zeilenumbruch
Wo ist "kein Zeilenumbruch"? In der Anzeige im Browser? Ich sagte doch schon, dass jeglicher Whitespace (und dazu gehören auch Zeilenumbrüche) in HTML als ein Leerzeichen dargestellt werden. Schau in den Quelltext, den der Browser bekommt, da ist der Zeilenumbruch sicher drin.
Deswegen habe ich dich auch auf die PHP-Funktion nl2br() hingewiesen und erwähnt, dass sie die im Text vorhandenen Zeilenumbrüche durch <br> ergänzt, damit auch HTML hier einen Zeilenumbruch macht.
Die erste von dir genannte Methode htmlspecialchars brauche ich also nicht zu verwenden.
Doch, denn das hat nichts, aber auch gar nichts mit dem ü-Problem zu tun!
Warum du htmlspecialchars() oder etwas Vergleichbares brauchst, siehst du deutlich, wenn du im Eingabefeld mal folgendes eingibst:
Es gilt x<4 oder x>8
Dann wirst du ohne korrekte Behandlung bei der HTML-Ausgabe sehen:
Es gilt x8
Den Text dazwischen wird der Browser als unbekanntes HTML-Tag auffassen und ignorieren.
Nun kommt mein Problem. Ich kriege es einfach nicht hin, dass der Zeilenumbruch dargestellt wird. Das Problem ist, dass alle Methoden, die ich bisher gefunden habe (und alle Möglichkeiten), \t, \n oder anderes eben entsprechend ersetzen. Damit kann ich aber nichts anfangen, da diese ja dort gar nicht stehen.
Doch, natürlich. Du hast mindestens \n als Zeilenumbruch, möglicherweise sogar \r\n.
Ich habe zum Beispiel auch solche Methoden ausprobiert: http://www.rgagnon.com/javadetails/java-0306.html
Die ersten drei Ersetzungen, die dieser Code vornimmt, bilden htmlspecialchars() nach und sind unbedingt notwendig. Der Rest ist Bullshit.
Das zeite Beispiel in dem von dir verlinkten Artikel kümmert sich wenigstens auch um die Umwandlung von Zeilenumbrüchen.
Schönes Wochenende,
Martin
--
Irgendwann in grauer Vorzeit benutzte einer unserer prähistorischen Vorfahren ein Schimpfwort anstelle der Keule.
Die Zivilisation hatte begonnen.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(