dedlfix: strings in sonderzeichen?

Beitrag lesen

Hi!

ich fürchte, mich überfordert die ganze angelegenheit etwas. ich kann verstehen, dass die vorgänge komplexer sind, als ich bislang dachte, aber ich hab eventuell nicht die zeit, mich da einzufühlen.

Kann ich gut verstehen, aber soo komplex ist es nun auch wieder nicht. Wichtig sind zwei Punkte: 1. Ein System muss mit der gewählten Kodierung umgehen können, wenn es nicht nur als Datendurchreicher arbeitet. 2. Beim Weitergeben an ein anderes System muss die Zeichenkodierung ausgehandelt oder angegeben werden. Die Zeichen müssen dann auch in dieser Kodierung gesendet werden.

Die DBMSe und die Browser sind eigentlich UTF-8-fähig. Dazwischen vermittelt PHP, der Webserver selbst spielt keine große Rolle. PHP ist noch nicht UTF-8-fähig, muss es aber nicht unbedingt sein, wenn du keine Stringfunktionen benötigst. Ansonsten gibt es die Funktionen der MultibyteExtension (mb_*).

Für die Browser musst du nichts weiter einstellen. Sie benötigen nur die Angabe im HTTP-Header und als Fallback im Meta-Element. (In Richtung Client) Den Content-Type-HTTP-Header stellst du in der Serverkonfiguration ein oder mit PHPs Funktion header().

Für das DBMS (MySQL angenommen) brauchst du den Anfang von Zeichencodierung/MySQL zu beachten.

Kommt noch hinzu das Korrigieren der bisherigen Daten.

daher brauche ich eine lösung, die funktioniert. ich scheitere schon daran, die sonderzeichen automatisch in der datenbank zu ändern, kann das aber eventuell in mühevoller kleinarbeit per hand tun.

UPDATE table SET feld=REPLACE(feld, 'Ω', 'Ω')

wäre eine Möglichkeit für das Ω. Das müsstest du mit jedem Übeltäter einzeln durchführen. Zum Finden kannst du sowas wie feld LIKE '%&#%' verwenden.

schöner wäre es daher, wenn man mit den besagten einträgen, in meinem fall als entity kodiert, irgendwie fortfahren könnte.

Das ist wirklich nicht zu empfehlen, weil du damit weitere Probleme ungelöst hast, die dir irgendwann auf die Füße fallen. Du scheinst bisher auch noch nicht das Thema Kontextwechsel zu beachten, denn dann würden dir schon diese NCRs (Entitys sind die Dinger mit den Namen (&foo;), NCRs heißen sie, wenn sie Zahlenwerte sind (&#0815;)) Probleme bereiten, weil sie zwar bereits HTML-notiert sind, aber die HTML-eigenen Zeichen <>&" noch nicht. Damit kommt dann eine Eingabe wie

24&48 Ω <script>...</script>

als

24&48 &#8486; <script>...</script>

bei dir an. Und wie willst du jetzt die das erste & und die <> behandeln, das NCR-& aber auslassen?

es scheint aber zu funktionieren, wenn ich [...]

Mach es lieber richtig. Die Folgen der falschen Lösung abzuschätzen, um sie guten Gewissens einsetzen zu können, ist noch schwerer, als sich richtig ins Thema einzuarbeiten.

Lo!