utf8 roman in ascii umwandeln

Cusco

Erfahrenes Mitglied
Hi,

ich habe das Problem das Umlaute in der Html-ausgabe als "?" dargestellt werden zum Beispiel M?nzen statt Münzen. In der Datenbank ist das Feld LONGTEXT "utf8 roman" vorgegeben, ich benötige aber normales ASCII so viel ich weis befinden sich die Umlaute über #128 in der ASCII-Codetabelle, liegt vieleicht daran. Ich habe es schon utf8_decode() und utf8_encode() versucht aber da erscheint das selbe ergebnis.

Die Ausgabe wird übrigens direkt in eine HTML-Datei geschrieben, wo keine HTML-Codierung angegeben wurde, weil ich einfach nicht weiß was ich dort angeben soll. Nach möglichkeit will ich aber die HTML-Codierung der Umlaute vermeiden also kein ü verwenden usw, das macht alles viel zu kompliziert. Es soll also "ä" als "ä" stehen wenn man die HTML-Datei in den Windows-Editor lädt.

Was muss ich also tun damit das passiert? Es ist noch eine recht kleine HTML-Datei eines Bannerskriptes welches ich gerade schreiben möchte. Die Banner werden dann über IFRAME in die Seite eingebunden. Das Feld in der Datenbank enthält den kompletten Banner-HTML-Code mit alt-Text (deshalb das Umlautproblem).
 
Oh wie Peinlich: Es wird jetzt doch alles richtig dargestelt, nur in der Datenbank waren die Umlaut als "?" gespeichert :rolleyes:

Aber trozdem welche HTML-Codierungsart sollte ich angeben, ich denke das das besser währe und wie muss die Zeile aussehen?
 
Der ASCII-Zeichensatz enthält nur 128 Zeichen, von denen auch keins ein Umlaut ist.

UTF-8 als Zeichenkodierung und damit Unicode als Zeichensatz ist da schon eine gute Wahl. Allerdings müssen dann die Werte auch tatsächlich UTF-8-kodiert sein. Die utf8_encode()- und utf8_decode()-Funktionen konvertieren übrigens nur zwischen UTF-8 und ISO 8859-1, wobei letztere die Standard-Zeichenkodierung beziehungsweise der Standard-Zeichensatz in vielen Editoren ist. Du müsstest deinen also umstellen, dass alles mit UTF-8-Kodierung kodiert wird.

Wenn du dann UTF-8 verwendest, musst du dies auch explizit angeben. Am besten machst du dies auf höchster Instanz, das heißt im HTTP-Header (PHP bietet dafür die header()-Funktion, Apache die AddDefaultCharset-Direktive). Zusätzlich ist es noch sinnvoll, sie auch im Dokument selbst anzugeben.
Bei UTF-8 kannst du dir übrigens Zeichenreferenzen wie ä sparen, da diese Zeichen direkt kodiert werden können.
 
Der ASCII-Zeichensatz enthält nur 128 Zeichen, von denen auch keins ein Umlaut ist.

UTF-8 als Zeichenkodierung und damit Unicode als Zeichensatz ist da schon eine gute Wahl. Allerdings müssen dann die Werte auch tatsächlich UTF-8-kodiert sein. Die utf8_encode()- und utf8_decode()-Funktionen konvertieren übrigens nur zwischen UTF-8 und ISO 8859-1, wobei letztere die Standard-Zeichenkodierung beziehungsweise der Standard-Zeichensatz in vielen Editoren ist. Du müsstest deinen also umstellen, dass alles mit UTF-8-Kodierung kodiert wird.

Wenn du dann UTF-8 verwendest, musst du dies auch explizit angeben. Am besten machst du dies auf höchster Instanz, das heißt im HTTP-Header (PHP bietet dafür die header()-Funktion, Apache die AddDefaultCharset-Direktive). Zusätzlich ist es noch sinnvoll, sie auch im Dokument selbst anzugeben.
Bei UTF-8 kannst du dir übrigens Zeichenreferenzen wie ä sparen, da diese Zeichen direkt kodiert werden können.

Apache ist das nicht die Serversprache? In der Servereinstellung kann ich nicht ändern sonder nur (PHP-) dateien hochladen, ausserdem würde sich das dann negativ auf die anderen Seiten auswirken und das alles bloss wegen ein blöden Bannerskript.

Ich dachte eigentlich an deinen Vorschlag direkt in der HTML-Datei angeben aber das mit dem Header() ist auch gut, nur was muss ich dazu wie genau angeben? Ich bitte um eine einfache Codezeile. Ich kenne mich mit diesen Zeichensätzen überhaupt nicht aus. Ausserdem besitzt einen ascii-Zeichensatz 256 Zeichen (8 Bit / 1 Byte) das kann in jeden Basic und C/C++ Buch nachgesehen werden. Aber anscheint ist die PHP/SQL-Welt eine andere. Zudem ich in der MYSQL Datenbank keine Variable gefunden habe die nur 1 Byte Umfang hat, das minimum scheint INT (4 Byte) zu sein, davor käme noch WORD (2 Byte), ebenfalls nicht gefunden.
 
Zurück