Anführungszeichen in Strings?

dflasjjs

Bekanntes Mitglied
Moin,
ich habe mir eine kleine Webanwendung mit Servlets und JSP gebaut.
Dort gibts Probleme wenn ich innerhalb des Strings Anführungszeichen schreibe (null-pointer).

Wie gehe ich damit am besten um? Gar nicht erst "-Zeichen zulassen? Oder gibts andere Möglichkeiten? Und gibts es noch andere Zeichen die eher Problematisch sind? Denke jetzt an <,>, ' usw?
 
T

Tomate_Salat

Gast
Java:
String bsp = "Ein String mit \"Anführungszeichen\"";

Edit Du musst vor Anführungszeichen die du in einem String verwenden willst [c]\[/c] setzen. Das auch für das zeiche [c]\[/c] selber:
Java:
 String asdf = "Ein Slash im String \\ und das Anführungszeichen\"";
.
 

dflasjjs

Bekanntes Mitglied
Also muss ich mir jeden String angucken den jemand einträgt und auf diese Zeichen überprüfen und ggf. den String editieren?
Die Daten kommen ja aus einem HTML-Formular ins Servlet und von dort in die Java-Anwendung... also im Servlet mal reinluschern und gucken ob "-Zeichen drin sind und ggf. \ vorschreiben is ne gute Methode?
 

Landei

Top Contributor
Ich glaube, du verstehst das Prinzip falsch. Im "Innern" besitzt jeder String ein char-Array, und da steht alles wie "gewohnt" drin, also z.B. wird aus dem String "ab\"cd" intern das Array char[]{'a','b','"','c','d'} - da gibt es keinen Backslash mehr. Diese Escape-Sequenzen sind nur dazu da, die Sache im Code "eindeutig" zu machen. Woher soll der Compiler auch wissen, ob du mit dem " nun ein Zeichen oder das String-Ende meinst? Der \ hat nun dadurch eine Spezialbedeutung (nicht nur dafür, sondern auch zur Darstellung nichtdruckbarer Zeichen wie "Carriage Return" \r, Zeilenumbruch \n oder Tabulator \t), muss also auch wieder speziell gekennzeichnet werden, hier mit \\. Wie gesagt, das ist nur ein Hilfsmittel um den Code in den Speicher zu bekommen, dort ist ein " auch ein ", ein \ ist ein \, ein Tab ist ein Tab u.s.w, und auch bei externen Quellen (Datei, HTTP...) wird das übertragen, was drinsteht.
 

dflasjjs

Bekanntes Mitglied
Ich muss mich korrigieren.
Der Konflikt tritt immer auf, wenn Checkboxen nutze und dort als Value irgendetwas mit Anführungszeichen habe, nun übergebe ich die Werte dem Servlet und der findet dann die Werte nicht mehr, weil ja alles bis zum ersten " abgeschnitten wird.

Also Beispiel:

Ich habe eine Auswahl von Gerichten, dieses kann vorher vom Benutzer eingegeben werden über ein Formular.
Er gibt folgende Gerichte ein:
Pizza
Lahm
Sahne "Spezial" Schnitzel

Dann kommt er zum Auswahlformular mit den Checkboxen. Beim letzten Gericht steht nun im Value-Ding: value="Sahne "Spezial" Schnitzel", im Browser sind alles richtig angezeigt, nur wenn ich das Formular abschicke und die Checkbox mit String[] radioVals = request.getParameterValues("radiogroup"); auslese, dann steht in radioVals[0] dann nicht mehr Sahne "Spezial" Schnitzel, sondern Sahne.

Da gibts nun natürlich mehrere Wege das zu beheben, " gar nicht zulassen, beim Value-Attribut die "s escapen.. was ist der eleganteste Weg für dieses Problem?
 
T

Tomate_Salat

Gast
[c]value='Sahne "Spezial" Schnitzel'[/c]

müsste auch funktionieren. Wie valide das ist, da bin ich mir aber nicht sicher^^
 
T

Tomate_Salat

Gast
Jup bezweifel dass das bei reinem xml funktionieren würde,bei html geht das aber glaub ich. Aber ist ja auch egal. Bezweifel dass das valide ist, denke eher dass hier html zu großzügig ist. Mit dem von dir (faetzminator) beschrieben Syntax ist man aber auf der sicheren Seite, also empfehlenswert eher den zu nehmen ;-)
 

dflasjjs

Bekanntes Mitglied
Hmm, dann müsste ich ja tausend Zeichen vor der AUsgabe umwandeln... <,>, ", ', & usw... sowas muss es doch schon irgendwie geben, oder nicht? bin kann ja nicht der einzige mit dem Problem sein...

Ansonsten... mach ich eben sone Methode wo ich jeden String vorher und nachher durchjagen muss und dieses ersetzt dann die Zeichen mit replace, oder kann ich da auch was mit Filtern machen?
 
T

Tomate_Salat

Gast
nun ja, ich würde mir überlegen, ob diese Zeichen zwingend notwendig sind, oder ob es nicht geschickter wäre, ID's zu vergeben.
 

dflasjjs

Bekanntes Mitglied
Unbedingt notwendig sind die Zeichen nicht. Du machst also die Zeichen gar nicht erst zulassen bei der Eingabe?

IDs ins Value-Feld schreiben? Würde im Prinzip gehen, aber das löst mein Gesamtproblem nicht. Wenn ich beispielsweise einen Datensatz editieren will, dann muss ich ja per Value den zu edtitierenden String reinschreiben. Da bringt mir die ID dann auch nichts.

Am liebsten würde ich wirklich die Zeichen rausfiltern, zumindest das ", alle anderen beeinträchtigen zumindest nicht die Funktion der Anwendung...
 
T

Tomate_Salat

Gast
Unbedingt notwendig sind die Zeichen nicht. Du machst also die Zeichen gar nicht erst zulassen bei der Eingabe?

Bei der Eingabe?! Da sollten die doch eigentl. bei der Übermittlung kein Problem sein. Ich glaube ich versteh deinen Antwendung nicht wirklich

IDs ins Value-Feld schreiben? Würde im Prinzip gehen, aber das löst mein Gesamtproblem nicht. Wenn ich beispielsweise einen Datensatz editieren will, dann muss ich ja per Value den zu edtitierenden String reinschreiben. Da bringt mir die ID dann auch nichts.

Nun ja, stünden die ID's als index für eine HashMap z.B sollte das eigentl. kein Problem darstellen, aber dafür müssten wir mehr Einblick in die Problemstelle haben.

Am liebsten würde ich wirklich die Zeichen rausfiltern, zumindest das ", alle anderen beeinträchtigen zumindest nicht die Funktion der Anwendung...

Nun ja, soetwas ist dann halt immer anfällig. Wenn du die Zeichen nur zur Anzeige benötigst, sollte das i.d.R. auch kein Problem sein (JLabels können ja HTML anzeigen, z.B.). Aber will man mit den Datensätzen wirklich arbeiten...nun ja, da würde ich eher versuchen eine Ausweichmethode zu finden, da man hier leicht einen sonderfall vergessen kann..
 

dflasjjs

Bekanntes Mitglied
Okay, dann beschreibe ich das Problem noch mal ein wenig genauer.

Es handelt sich um eine Webanwendung, mit JSP, Servlets und einen Java-Kern.
Typischer Fall ist nun das Hinzufügen von irgendwelchen Daten.
Dafür gibts es ein HTML-Formular in den JSPs. Beispielswiese Benutzer will man hinzufügen:

Code:
<form action="/addPerson" method="post">
				<fieldset>
					<label>Benutzername:</label><br />
					<input type="text" name="accountName" value="" /> [...]

So, nun trägt der Benutzer dort folgendes ein:
Simon "die katze" Schmidt

Schickt das Formular ab, das Servlet trägt es in den Datenbestand ein. Alles top.
Wenn ich nun den Namen editieren will, dann sieht das Formular so aus:

Code:
<form action="/editPerson" method="post">
				<fieldset>
					<label>Benutzername:</label><br />
					<input type="text" name="accountName" value="Simon "die katze" Schmidt" /> [...]

Der Name wird zwar richtig im Editierfeld angezeigt, aber nach dem abschicken (würde man nichts ändern am Namen), käme beim Servlet nur noch 'Simon ' an.

Mein Gedanke wäre nun, eine Methode die ein String zu einem XHTML fähigen String macht.
Code:
<input type="text" name="accountName" value="<%=meineStringUmwandelMethode( p.getAccountName() %>" />

Dieser macht dann eben aus einem " ein &quot;

Allerdings müsste ich in den Servlet dann ja noch die Gegenmethode haben, die alles wieder umwandelt.
Das könnte ich so machen und es wäre nicht mal so großer Aufwand bei mir. Die Frage ist, ist das sauber, macht man das so?
 
T

Tomate_Salat

Gast
der Benutzer muss dann doch in einer Datenbank o.ä. gespeichert werden (nehme ich mal an). Wieso dem ganzen nicht ein ID-Feld (bei mir ist das ganz einfach immer der primary key in der mysql) geben, über den der Benutzer eindeutig idendifiziert werden kann?
 

dflasjjs

Bekanntes Mitglied
Wenn ich das mache, dann muss im Value-Feld doch trotzdem der Wert stehen und nicht die ID, ich will in dem Editierfeld ja nicht "12" stehen haben, sondern den Namen, den er vorher auch eingetragen hat.
 
T

Tomate_Salat

Gast
verstehe das Problem nicht: wenn da 12 drin steht, dann hast du eine einfache Idendifizierung unabhängig von seinen Daten, dem Benutzer kanns egal sein, was im Valuefeld steht.
Ich für das mal ein bisschen ins extreme: Du hinterlegst doch auch nicht das Passwort auf der Seite, um es danach editieren zu können.
 

dflasjjs

Bekanntes Mitglied
Ich glaube wir reden irgendwie aneinander vorbei.
Die Identifizierung brauch ich gar nicht, das war oben ein Sonderfall, dadurch bin ich überhaupt auf das grundsätzliche Problem aufmerksam geworden und das besteht ja fernab von der Identifizierung, in allen Textfeldern.

Zum Editiervorgang: Im Prinzip mache ich es genau so. Beim Passwort jetzt nicht, weil das ja eh nicht im Klartext vorliegt, aber bei allen anderen Feldern, dort lade ich die Daten aus dem Java-Kern und schreibe sie als Value-Attribut ins Textfeld, so dass der Benutzer seine vorher eingegebenen Daten verändern kann.
 
T

Tomate_Salat

Gast
mal ein Paar hintergrundfragen:
a) Gibt es eine Benutzerdatenbank?
b) gibt es mehrere Benutzer?
c) if(a == true) welche art von Benutzerdatenbank gibt es?
 
T

Tomate_Salat

Gast
Ah mist, jetzt hab ich dein Problem kapiert :autsch:

Allerdings müsste ich in den Servlet dann ja noch die Gegenmethode haben, die alles wieder umwandelt.
Das könnte ich so machen und es wäre nicht mal so großer Aufwand bei mir. Die Frage ist, ist das sauber, macht man das so?

Ich wüsste nichts was dagegen sprechen sollte. Aber generell würde ich mir überlegen, ob ich solche Sonderzeichen überhaupt zulassen würde als Eingabe. Ich kenne jetzt z.b. niemanden der [c]"[/c] in seinem namen hat.
 

dflasjjs

Bekanntes Mitglied
Ah mist, jetzt hab ich dein Problem kapiert :autsch:
:)


Ich wüsste nichts was dagegen sprechen sollte.
Supi


Aber generell würde ich mir überlegen, ob ich solche Sonderzeichen überhaupt zulassen würde als Eingabe. Ich kenne jetzt z.b. niemanden der [c]"[/c] in seinem namen hat.

Im Namen jetzt nicht, aber Benutzernamen war ja nur ein Beispiel von vielen. Ich habe auch viele Kommentarfelder usw. in der Anwendung, da macht sowas durchaus sinn. :)
 

Antoras

Top Contributor
Es gibt nur eine Möglichkeit, wie du 100%ig sicher gehen kannst, dass keine Fehleingaben gespeichert werden: Du musst jedes Zeichen der Eingaben, wie aber bereits gesagt, auf Gültigkeit überprüfen.

D.h. wenn du nicht willst, dass später in deinem XML- oder HTML-Dokument irgendwelche Sonderzeichen ausgegeben werden, musst du diese maskieren. Eine Möglichkeit wäre bspw. für das Zeichen
Code:
"
das HTML-Metazeichen
Code:
&quot;
zu verwenden. Schon hättest du ein Problem weniger. Oder aber du sorgst dafür, dass bei den Zeichen die Escape-Sequenz
Code:
\
davor gestellt wird.

Später, wenn du vorhast auf eine Datenbank umzusteigen, benötigst du sowieso Funktionen, die Zeichen mit einer besonderen Bedeutung ersetzen, da man die DB von außen zu einfach manipulieren kann. Google mal nach dem Stichwort Code-Injection. Da die Injections aber auch ohne DB auftreten können, führt kein Weg an der Zeichenüberprüfung vorbei, auch wenn es lästig erscheint. Aber sind die Funktionen dafür erst einmal gecodet, brauchst dir darum keine Gedanken mehr machen.
 

rambozola

Bekanntes Mitglied
[c]value='Sahne "Spezial" Schnitzel'[/c]
müsste auch funktionieren. Wie valide das ist, da bin ich mir aber nicht sicher^^
Es ist zumindest kein valides XML (also XHTML). Immer schön [c]<tag key="value" />[/c] verwenden ;)
Jup bezweifel dass das bei reinem xml funktionieren würde,bei html geht das aber glaub ich. Aber ist ja auch egal. Bezweifel dass das valide ist, denke eher dass hier html zu großzügig ist. Mit dem von dir (faetzminator) beschrieben Syntax ist man aber auf der sicheren Seite, also empfehlenswert eher den zu nehmen ;-)
Natürlich ist das well-formed XML, mit Validität hat das allerdings nichts zu tun...
 

dflasjjs

Bekanntes Mitglied
Es gibt nur eine Möglichkeit, wie du 100%ig sicher gehen kannst, dass keine Fehleingaben gespeichert werden: Du musst jedes Zeichen der Eingaben, wie aber bereits gesagt, auf Gültigkeit überprüfen.


Jau, ich habe nun auch gemacht, alle numerischen Werte hatte ich eh durch so eine Methode gehauen. Für alle anderen Werte hab ich ebenfalls eine erstellt, damit bin ich relativ flexibel. :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
HolyFUT JSON String in Java Object schreiben - Anführungszeichen rauskriegen? Java Basics - Anfänger-Themen 17
J Anführungszeichen ausgeben Java Basics - Anfänger-Themen 3
T Datentyp mit Anführungszeichen drinnen Java Basics - Anfänger-Themen 3
T Erste Schritte Char 'Anführungszeichen' Tastaturkürzel Java Basics - Anfänger-Themen 1
S Das Anführungszeichen(") Zeichen in einen String setzen Java Basics - Anfänger-Themen 1
K Methoden String aus Anführungszeichen bekommen Java Basics - Anfänger-Themen 3
F Trennzeichen für Anführungszeichen Java Basics - Anfänger-Themen 1
OnDemand Anführungszeichen im String werden als incompatible in der Konsole ausgegeben Java Basics - Anfänger-Themen 3
L Anführungszeichen in Java Java Basics - Anfänger-Themen 43
M Anführungszeichen entfernen Java Basics - Anfänger-Themen 9
T Doppelte Anführungszeichen ersetzen?? Java Basics - Anfänger-Themen 4
J Substring zwischen Anführungszeichen finden Java Basics - Anfänger-Themen 10
W Gleichzeitiges ersetzen mehrerer Strings Java Basics - Anfänger-Themen 7
R Datentypen Das Verhalten von Strings als Datentypen Java Basics - Anfänger-Themen 7
N Nachkommastellen von Strings Java Basics - Anfänger-Themen 3
T Strings unveränderlich???? Java Basics - Anfänger-Themen 22
B Alle Strings bis zu einer Maimallänge aufzählen, die Bedingung erfüllen Java Basics - Anfänger-Themen 13
S Die durchschnittliche Länge der Strings Java Basics - Anfänger-Themen 11
M Operatoren Strings mit Vergleichsoperatoren, funktioniert das? Java Basics - Anfänger-Themen 9
S Variablen Letzte Zeile eines Strings entfernen Java Basics - Anfänger-Themen 1
D Strings aus Excel-Datei einlesen Java Basics - Anfänger-Themen 2
P9cman Tipps für Rekursive Aufgaben mit Strings oder allgemein Java Basics - Anfänger-Themen 2
sserio StringBuilder und Strings Java Basics - Anfänger-Themen 8
J Größe eines Strings in Pixel Java Basics - Anfänger-Themen 18
schredder Strings und reguläre Ausdrücke - Methode mit return string.matches Java Basics - Anfänger-Themen 5
B Konkatenieren eines Strings und inkremtierenden Zahl zu einer INT Variablen Java Basics - Anfänger-Themen 7
N Strings verpflechten Java Basics - Anfänger-Themen 4
G Strings auf Gleichheit prüfen - Aufgabe vom Prof. Java Basics - Anfänger-Themen 5
A 2 Strings vergleichen in einer methode wenn man mit Globalen variablen arbeitet Java Basics - Anfänger-Themen 12
L Strings aneinanderhängen Java Basics - Anfänger-Themen 2
M Strings vergleichen Java Basics - Anfänger-Themen 10
Nerdinfekt BMI Rechner, fehler beim Zurückgeben des Strings? Java Basics - Anfänger-Themen 2
U Problem mit dem initialisieren meines Strings in einer Schleife Java Basics - Anfänger-Themen 5
S 2 Strings mit Equals vergleichen Java Basics - Anfänger-Themen 11
Q Besitzen zwei Strings identische Buchstaben, nur in anderer Reihenfolge? Java Basics - Anfänger-Themen 10
marcooooo Separator zwischen allen Zeichen eines Strings einfügen Java Basics - Anfänger-Themen 29
C Ternärer Operator mit Strings Java Basics - Anfänger-Themen 3
M Wie kann ich bei int-Variablen im exception handler auf bestimmte Strings reagieren? Java Basics - Anfänger-Themen 5
P Verketten, Aneinanderreihen von Strings Java Basics - Anfänger-Themen 2
M Strings mit gerader und ungerader Länge ausgeben Java Basics - Anfänger-Themen 10
J Alle Werte eines Strings zusammen addieren Java Basics - Anfänger-Themen 15
W Strings und das parsen Java Basics - Anfänger-Themen 8
D Frage zu Strings einer Exception Java Basics - Anfänger-Themen 4
D Vergleichen von Strings Java Basics - Anfänger-Themen 6
M Konkatenation von zwei Strings Java Basics - Anfänger-Themen 6
J Abbruchbedingung in Schleife/ Untersuchung von Strings Java Basics - Anfänger-Themen 2
S Buchstaben in Großbuchstaben (Strings) Java Basics - Anfänger-Themen 5
X Anagramm mit Strings und Methode Java Basics - Anfänger-Themen 53
P geschachtelte Schleife mit Strings Java Basics - Anfänger-Themen 2
P Strings mit der Axt zerteilen Java Basics - Anfänger-Themen 7
F Alle Zeichenkombinationen eines Strings iterativ herausfinden Java Basics - Anfänger-Themen 26
K Strings hochzählen Java Basics - Anfänger-Themen 20
J Strings untereinander in einer Liste vergleichen Java Basics - Anfänger-Themen 18
B Frage zu: String... strings -> Ungleiche Anzahl an Parameter? Java Basics - Anfänger-Themen 4
F Vergleiche mit charAt funktioniert bei Strings nicht, was tun? Java Basics - Anfänger-Themen 5
T Probleme mit Strings Java Basics - Anfänger-Themen 6
J Unveränderbarkeit von Strings Java Basics - Anfänger-Themen 3
O Klammerung bei Strings Java Basics - Anfänger-Themen 10
A Liste aus drei Strings erstellen Java Basics - Anfänger-Themen 5
N Zwei Strings mit "==" vergleichen warum TRUE Java Basics - Anfänger-Themen 2
G Teil(e) eines Strings entfernen wenn spezifische Zeichen (< & >) vorkommen Java Basics - Anfänger-Themen 5
D ergebnis.matches("[1-9]?[0-9].[0-9][0-9]?") ein teil eines größeren Strings Java Basics - Anfänger-Themen 12
J Breite eines Strings bestimmen Java Basics - Anfänger-Themen 4
D Zwei Strings sind gleich bei if aber nicht true Java Basics - Anfänger-Themen 2
F JList Elemente mit Strings vergleichen Java Basics - Anfänger-Themen 12
J Strings sind gleich werden aber ungleich ausgewertet Java Basics - Anfänger-Themen 2
N Vergleich von Strings schlägt fehl.. Java Basics - Anfänger-Themen 5
B 4 Strings, Anfangsbuchstaben muss unterschiedlich sein Java Basics - Anfänger-Themen 12
P Strings in String Array schreiben Java Basics - Anfänger-Themen 13
J Input/Output Strings aneinander reihen mit while schleife Java Basics - Anfänger-Themen 25
B mir nur die Gesamtzahl von einzigartigen Strings aus Array ausgeben lassen Java Basics - Anfänger-Themen 5
R Erste Schritte Sicheres einlesen eines Strings Java Basics - Anfänger-Themen 2
F Maximale Länge eines Strings Java Basics - Anfänger-Themen 5
J Best Practice Datum Differenz aus zwei Strings ermitteln Java Basics - Anfänger-Themen 8
Jinnai4 Strings ersetzen Java Basics - Anfänger-Themen 9
R Übergeben eines Array Strings an einen Spinner Java Basics - Anfänger-Themen 4
L Rekursiv zwei Strings vergleichen Java Basics - Anfänger-Themen 3
L Prüfe, ob die im String Array enthaltenen Strings aufsteigend sind. Java Basics - Anfänger-Themen 19
J Algorithmus - Strings auf eigene Reihenfolge miteinander vergleichen Java Basics - Anfänger-Themen 4
DaCrazyJavaExpert Variablen Zahlen aus Strings auslesen Java Basics - Anfänger-Themen 4
C 2 Strings Java Basics - Anfänger-Themen 15
T befehle unterschiedlicher anzahl an strings wiedergeben Java Basics - Anfänger-Themen 2
JavaNewbie2.0 Strings in andere Klassen importieren. Java Basics - Anfänger-Themen 2
D BlueJ Java: Strings voneinander trennen Java Basics - Anfänger-Themen 11
javaerd Wie kann ich Brute Force Methode mit Strings erweitern Java Basics - Anfänger-Themen 1
R Erste Schritte Strings "einrücken" Java Basics - Anfänger-Themen 3
Yamie ArrayList<Object> als Liste von Strings ausgeben? Java Basics - Anfänger-Themen 15
B gemeinsames Vorkommen der charactere von 2 Strings als String zurückgeben Java Basics - Anfänger-Themen 5
R Teilinhalt eines Strings testen Java Basics - Anfänger-Themen 10
H Erste Schritte JTree: Instanzen einer Klasse speichern oder Namen/Strings... Java Basics - Anfänger-Themen 4
L Werte von Strings ? Java Basics - Anfänger-Themen 1
L Strings und Arrays - Expand Java Basics - Anfänger-Themen 12
I Schachbrett aus beliebigen Strings erstellen Java Basics - Anfänger-Themen 3
Syncopated Pandemonium Verketten von Strings funktioniert nicht Java Basics - Anfänger-Themen 4
F Wahrscheinlichkeit von Strings Java Basics - Anfänger-Themen 3
MiMa Splitten eines Strings Java Basics - Anfänger-Themen 5
T Hashfunktion für Strings Java Basics - Anfänger-Themen 3
C Zeilenumbruch für langes Strings Java Basics - Anfänger-Themen 2
J Variablen Strings mit Zeilenumbrüchen in neues Array Element Java Basics - Anfänger-Themen 1
T Datentypen compareTo() u. equals() bei Strings Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben