Mit Sonderzeichen arbeiten (Usereingabe).
markus_walther
- datenbank
0 suit0 markus_walther
Hallo,
Ich habe folgende Frage:
Ich möchte eine Usereingabe auswerten lassen, und mit Einträgen in der DB vergleichen. Die Usereingaben können öfters auch Sonderzeichen (Umlaute usw...) enthalten.
Wenn ich diese Sonderzeichen ausgebe, wird mir immer nur diese raute mit dem Fragezeichen angezeigt. Das liegt wahrscheinlich am Zeichensatz (utf-8).
Deshalb kann ich die Usereingaben nicht mit denen in der DB vergleichen.
Wie kann ich das beheben? Sollte ich den Zeichensatz ändern? Wenn ja, in welchen?
Danke für hilfreiche Antworten.
Markus
Wenn ich diese Sonderzeichen ausgebe, wird mir immer nur diese raute mit dem Fragezeichen angezeigt. Das liegt wahrscheinlich am Zeichensatz (utf-8).
UTF-8 ist kein Zeichensatz - und nein, es liegt mit Sicherheit nicht daran.
Mit hoher wahrscheinlichkeit verwendest du nicht konsequent dieselbe Zeichencodierung oder machst beim Umcodieren Fehler.
Wie kann ich das beheben? Sollte ich den Zeichensatz ändern? Wenn ja, in welchen?
Siehe oben: du kannst den Zeichensatz kaum ändern - dieser wird in fast allen fällen Unicode sein.
Lediglich die Zeichencodierung kannst du einfach beeinflussen.
Danke erstmal für die schnelle Antwort.
Lediglich die Zeichencodierung kannst du einfach beeinflussen.
Für Sonderzeichen benutze ich bei Texten zB. ä. Die User geben aber natürlich ä und nicht den HTML-Code ein.
Und wie kann ich jetzt die Zeichencodierung beeinflussen, dass es "funktioniert"?
markus
Für Sonderzeichen benutze ich bei Texten zB.
ä.
Und warum machst du das?
Die User geben aber natürlich ä und nicht den HTML-Code ein.
Ist auch nicht verwunderlich, ich würde es auch so machen - selbst in Quelltexten ;)
Und wie kann ich jetzt die Zeichencodierung beeinflussen, dass es "funktioniert"?
In deinem Fall ist es kein Zeichencodierungsproblem - du stehst vor dem Problem, dass du nicht maskierte Zeichen mit maskierten Zeichen vergleichen willst.
Dazu hast du zwei Möglichkeiten:
Endweder du entfernst die Maskierung _deiner_ Daten in deinem Datenbestand oder du maskierst die Zeichen der Eingaben vor dem Vergleich.
Ich rate dir _dringend_ zum Überarbeiten deines Datenbestandes da du mit Möglichkeit #2 unweigerlich auf das Problem soßen wirst, dass sich ein ä auf verschiedene Arten maskieren lässt
Benannt: ä
Numerisch (Dezimal): ä
Nummerisch (Hexadezimal): ä
Wenn du also automatisiert in eine dieser Formen maskierst, kannst du nicht davon ausgehen, dass das auch so in deiner Datenbank steht.
Danke.
Na dann mach ich mich mal an die Arbeit...
Ich habe jetzt alle Sonderzeichen ersetzt durch "normale Sonderzeichen" (ä --> ä).
Trotzdem werden alle Sonderzeichen als "Fragezeichen in einer Raute" dargestellt? Woran kann das liegen?
markus
Trotzdem werden alle Sonderzeichen als "Fragezeichen in einer Raute" dargestellt? Woran kann das liegen?
Das scheint jetzt ein Zeichencodierungfehler zu sein.
Diese sollte überall der einfachheit halber UTF-8 sein - deine Dateien/Dokumente, die Datenbankverbindung, die Datenbank selbst und natürlich auch die HTTP-Header die dem Client übermittelt werden.
Okay, das funktioniert schonmal.
Hatte vor dem "Header-Teil" (da wo auch Zeichencodierungsart drin steht) noch ein kleines PHP-Script...
Ein Problem bleibt aber noch:
Im Footer habe ich jetzt "echte" Sonderzeichen, also keine Umlaute, z.B. das Copyrightzeichen. Dieses wird aber so angezeigt: ©
Warum?
Danke schonmal bis hier.
Okay, das funktioniert schonmal.
Hatte vor dem "Header-Teil" (da wo auch Zeichencodierungsart drin steht) noch ein kleines PHP-Script...Ein Problem bleibt aber noch:
Im Footer habe ich jetzt "echte" Sonderzeichen, also keine Umlaute, z.B. das Copyrightzeichen. Dieses wird aber so angezeigt: ©Warum?
Danke schonmal bis hier.
Ah. Da habe ich jetzt wieder die HTML-Codes verwendet uns es geht.
@@markus_walther:
nuqneH
Ah. Da habe ich jetzt wieder die HTML-Codes verwendet uns es geht.
Ah. Schon wieder ein Problem unter den Teppich gekehrt ansatt es zu lösen.
Qapla'
Im Footer habe ich jetzt "echte" Sonderzeichen, also keine Umlaute, z.B. das Copyrightzeichen. Dieses wird aber so angezeigt: ©
Vermutlich hast du doppelt codierte Zeichen..
Das Copyright-Zeichen wird in UTF-8 mit der Bytefolge C2 A9 codiert, in diversen ANSI-Zeichencodierungen aber nur als A9.
Mit doppelt codiert meine ich, dass in deinem Quelltext ggf. die Bytefolge C2 C2 A9 zu finden ist
Hi!
Für Sonderzeichen benutze ich bei Texten zB. ä. Die User geben aber natürlich ä und nicht den HTML-Code ein.
Und wie kann ich jetzt die Zeichencodierung beeinflussen, dass es "funktioniert"?
Wo verwendest du ä? In den Texten, die im DBMS stehen? Ist das insgesamt ein HTML-Text oder ist es im Grunde reiner Text, den du irgendwann später mal in eine HTML-Umgebung ausgibst? Das wäre dann ein Kontextwechsel-Problem, speziell HTML in der Datenbank.
Weitere Literatur aus dem SELFHTML-Wiki:
Lo!