Mysql, tschechische/polnische Buchstaben


Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

nebbiolo

Grünschnabel
Hallo
Ich habe eine SQL-Tabelle mit UTF8 und utf8_general_ci definiert.
Der Input ist aus einer ANSI-Datei die ich mit:
PHP:
$text=utf8_encode ($teile[6]);
einlese.
Die Umlaute wie öäüè etc. werden problemlos richtig abgelegt.
Nun habe ich aber festgestellt, dass z.B. von "DÉLKA ŠTOLY je cca 3 až" das "É" in der DB richtig dargestellt wird, das "Š" und "ž" jedoch als "�".
Der Header ist:
HTML:
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
Nun meine Frage:
kann ich etwas anders definieren, dass die Zeichen in der DB richtig angezeigt werden?
oder was muss/kann ich machen, dass die Zeichen richtig importiert werden?
Schönen Sonntag und viele Grüsse, nebbiolo
 
Zuletzt bearbeitet von einem Moderator:

ComFreek

Mod | @comfreek
Moderator
Grundsatz jeder Internationalization/Kodierungsgeschichte: kenne alle Kodierungen all deiner Eingabe- und Ausgabedaten.

Du sagst, deine Datei sei eine "ANSI-Datei". Laut What is ANSI format? ist das zu ungenau: es sagt nur aus, dass deine Datei mit 8-Bit pro Zeichen kodiert ist, wobei Bytes, deren MSB 0 ist, eben ASCII-kodiert sind, und deren MSB 1 ist anders kodiert sind.
Höchstwahrscheinlich ist deine Datei, wie in der StackOverflow-Antwort beschrieben wird, mit Windows-1252 kodiert.
Ergo musst du mal "php windows 1252 to utf8" auf Google suchen, um zu wissen, wie man das in UTF-8 konvertiert. Da kommt dann sowas wie $utf8String = iconv('Windows-1252', 'UTF-8', $win1252String); raus.

PHP: utf8_encode - Manual ist die falsche Funktion, siehe auch PHP: utf8_encode - Manual:
https://www.php.net/utf8_encode hat gesagt.:
Hinweis:

Viele Webseiten, die ausgewiesen sind die ISO-8859-1 Zeichenkodierung zu verwenden, nutzen in Wirklichkeit die ähnliche Windows-1252 Kodierung, und Webbrowser interpretieren ISO-8859-1 Webseiten als Windows-1252. Windows-1252 ermöglicht zusätzliche druckbare Zeichen, so wie das Euro-Zeichen (€) und geschweifte Anführungszeichen (“”) anstelle von bestimmten ISO-8859-1 Kontrollzeichen. Diese Funktion konvertiert solche Windows-1252 Zeichen nicht korrekt. Verwenden Sie eine andere Funktion, wenn Windows-1252 Konvertierung erforderlich ist.
(utf8_encode ist eine schreckliche Falschbezeichnung für die Fuktion.)

Der Header ist:
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
Beachte, dass der HTTP-Header Content-Type Vorrang vor dieser Metadirektive hat, wenn der Content-Type-Header ein Charset spezifiziert. Ich würde also lieber den Server den Content-Type-Header mit UTF-8 ausgeben lassen als die Metadirektive zu nutzen. (Beides nutzen schadet natürlich nicht.)

Außerdem: ist deine SQL-Verbindung auch auf UTF-8 gestellt?

Du hast also drei Aufgaben :)
  • iconv wie oben beschrieben statt utf8_encode nutzen
  • Content-Type Header überprüfen/setzen lassen
  • Überprüfen, ob SQL-Verbindung auch auf UTF-8 gestellt ist

PS: Bitte Codetags in der Zukunft nutzen, siehe Link in meiner Signatur. Ich habe diese in deinen Beitrag mal reineditiert.
 

nebbiolo

Grünschnabel
Guten Morgen
Vielen Dank ComFreek für die ausführliche Hilfe - die ich sehr zu schätzen weiss!
Ich habe nun für die Konvertierung iconv (statt utf8_encode) verwendet und die Zeichen werden "richtig" dargestellt.
Schöne Woche und gute Gesundheit, Nebbiolo
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…