![]() |
Websiteumstellung auf UTF-8, wie geht's?
Hallo,
es ist wirklich grauenhaft, was alles zu tun ist, um eine Website auf UTF-8 umzustellen. Was man da alles verändern muss. Ich bekomme es jedenfalls nicht korrekt hin, denn entweder wirde es nicht alles in die Datenbank eingetragen oder es wird im Browser falsch codiert dargestellt. Die MySQL-Datenbank ist so eingestellt (diese 2 Beispiele verdeutlichen das ganz gut):
SQL-Code:
Wenn ich nun ganz gewöhnlich über die PHP-Funktionen etwas in die Datenbank einfügen (INSERT INTO ...) und auch normal wieder auslesen möchte (SELECT ... FROM ...), dann sehe ich im Browser nur diese seltsamen Zeichen, trotz UTF-8-Header, den ich mittels header() sende und in den Meta-Tags zusätzlich angegeben habe (der Internet Explorer braucht das zwingend dort).
# Datenbank
CREATE DATABASE `main` CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci'; # Eine der Tabellen CREATE TABLE `page_acronyms` ( `acronym_name` varchar(255) collate utf8_unicode_ci NOT NULL default '', `acronym_desc` varchar(255) collate utf8_unicode_ci NOT NULL default '', `lang` varchar(4) collate utf8_unicode_ci NOT NULL default '', PRIMARY KEY (`acronym_name`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; Mir wurde dann der Tipp gegeben, zu Beginn das hier aufzurufen, was jedoch auch nicht weiterhilft, denn das schneidet mir die String ab einem Sonderzeichen einfach ab:
SQL-Code:
Es kann ja nicht sein, dass ich beim Eintragen und Auslesen immer utf8_encode() bzw. utf8_decode() verwenden muss.
SET NAMES 'utf8'
Wo liegt der Fehler? Grüße |
Re: Websiteumstellung auf UTF-8, wie geht's?
Hallo,
Zitat:
Zitat:
Gruß xaromz |
Re: Websiteumstellung auf UTF-8, wie geht's?
Zitat:
Mit welchem Zeichensatz sind deine Dateien kodiert? LG, Xong |
Re: Websiteumstellung auf UTF-8, wie geht's?
Hallo Xong,
ich war der Meinung, wenn der Browser UTF-8 vorgegeben bekommt, übergibt er die Daten auch in dem Format weiter (beispielsweise bei Formularen). Grüße |
Re: Websiteumstellung auf UTF-8, wie geht's?
Formulareingaben musst du sowieso immer überprüfen.
Du weißt nie, in welchem Encoding die Daten ankommen. Dort ist ein utf8_encode also unerlässlich. Trotzdem würde ich gerne noch wissen, mit welchem Editor / welcher IDE du deine PHP-Dateien speicherst und welche Zeichenkodierung diese haben. =) LG, Xong |
Re: Websiteumstellung auf UTF-8, wie geht's?
Hallo Xong,
ach das hast du gemeint! Ich nutze PHPEclipse und das speichert die Dateien meines Wissens im ANSI-Format ab. Ich muss das alles also doch immer manuell kodieren, ohje. :( Grüße Edit: Da ich die ganzen Strings in den Abfragen über eine eigene Funktion behandle, wäre der Aufruf von utf8_encode doch mit minimalem Aufwand verbunden, sehe ich gerade. :) Daran hatte ich gar nicht gedacht. Nur utf8_decode wäre mit größerem Aufwand verbunden. Dennoch würde mich interessieren, ob das wirklich zwingend erforderlich ist. |
Re: Websiteumstellung auf UTF-8, wie geht's?
Zitat:
Ich habe das Programm hier nicht installiert, aber wenn ich zu Hause bin, kann ich dir weiterhelfen, wenn du es bis dahin nicht schon selbst gefunden hast! Zitat:
|
Re: Websiteumstellung auf UTF-8, wie geht's?
Ich kann die Dateien natürlich als UTF-8 speichern, sehe jedoch keinen Grund dafür, da ich nicht über den ANSI-Zeichensatz hinausgehe.
|
Re: Websiteumstellung auf UTF-8, wie geht's?
Hi Matze,
wenn du UTF-8 verwenden willst, musst du auch konsequent dieses Dateifomat verwenden. Die Angabe im Header alleine bedeutet ja noch nicht, dass die Datei wirklich dieses Format hat. Du versendest also im Moment einen Mix aus ANSI und UTF-8. Das muss zwangsläufig zu Fehlern führen. Beispiel: Wenn du alles auf Unicode eingestellt hast, und in deiner (ANSI-)PHP-Datei dann schreibst
Code:
Dann sendest du ja automatisch einen ANSI-String an MySQL. Schließlich steht er in einer ANSI-Datei, ist also als ANSI gespeichert. Das gilt natürlich auch für String-Übergaben an eigene Methoden etc.
mysql_query("SELECT * FROM table WHERE intID = 2");
Also: Konsequent ein Dateiformat benutzen. Christopher |
Re: Websiteumstellung auf UTF-8, wie geht's?
Zitat:
Der ANSI-Zeichensatz ist in UTF-8 enthalten! Du speicherst also schon in UTF-8... :thumb: |
Re: Websiteumstellung auf UTF-8, wie geht's?
@Mike: Ah ok, dann muss ich das wirklich machen.
Zitat:
Irgendwan konvertiere ich die ganzen Dateien, doch Iconv ist unter Windows eine Krankheit und manuell habe ich jetzt keinen Kopf dafür. Ich melde mich dann, wenn es mal soweit ist. |
Re: Websiteumstellung auf UTF-8, wie geht's?
Zitat:
Ein Editor kann nämlich nicht unterscheiden, ob eine Textdatei im ANSI- oder um UTF-8-Zeichensatz gespeichert wurde. Weil ANSI eben eine Untermenge von UTF-8 ist. Es gibt nun Editoren, die automatisch die kleinst mögliche Untermenge auswählen. (Notepad2 z.B.) Bsp.: { 1, 65, 23423, 32, 2 } Sind die Elemente dieser Menge Natürliche oder Ganze Zahlen? Beides natürlich... =) Notepad2 würde nun festlegen, dass es Natürliche Zahlen seien. Ich würde die Ganzen Zahlen bevorzugen. Aber das ist jedem selbst überlassen. Ich hoffe, ich konnte etwas helfen. LG, Xong |
Re: Websiteumstellung auf UTF-8, wie geht's?
Hm ok, danke. Ich habe die relevanten Dateien nun konvertiert (in Eclipse: "Set Encoding").
Also Umlaute wie ä, ö, ü werden korrekt eingetragen und dargestellt, wenn ich das richtig sehe. Doch sobald ich chinesische zeichen wie 文字 einfüge, steht in der Datenbank nur 文字, was so auch auf der Website angezeigt wird. :? Edit: Die DP stellt das sogar richtig dar. Daher vermute ich, muss generell ein utf8_decode kommen, auch wenn ich nicht ganz verstehe wieso. Oben fügte ich übrigens als zweites: 文字 ein. |
Re: Websiteumstellung auf UTF-8, wie geht's?
Zitat:
Bei einer echten UTF-8 Kodierung würde das Zeichen 文 Hexadezimal als E6 96 87 gespeichert werden. Und wenn du weiterhin Probleme mit UTF-8 bzw. Datenübertragung zwischen Datenbank und Webseite haben solltest, dann wendest du dich am besten ans Selfhtml-Forum. Da sind sehr kompetente Leute. LG, Xong |
Re: Websiteumstellung auf UTF-8, wie geht's?
Herzlich willkommen in der Delphi-PRAXiS, Xong.
Zitat:
Freundliche Grüße |
Re: Websiteumstellung auf UTF-8, wie geht's?
Zitat:
Zitat:
ASCII: Die ersten 128 Unicode-Zeichen. ANSI: Die ersten 256 Unicode-Zeichen. |
Re: Websiteumstellung auf UTF-8, wie geht's?
Hallo,
Zitat:
EASCII ist für mich ein informelles Akronym und ich verbinde es mit dem von IBM 1981 auf dem Ur-PC benutzten Extended ASCII (8 bit statt 7 bit). EASCII ist heute CP437. Kennst du eine andere Definition, vorzugsweise mit URL dazu? Freundliche Grüße |
Re: Websiteumstellung auf UTF-8, wie geht's?
Ich schreibe hier über ein Thema, womit ich mich eher oberflächlich beschäftigt habe.
Ich nutze UTF-8 und komme damit gut zurecht. Mit anderen Zeichensätzen musste ich mich also auch nicht großartig auseinandersetzen Jedenfalls habe ich mich mit ANSI auf ISO 8859-1, nicht CP1252 bezogen. =) (Die DP scheint sich auch darauf zu beziehen. Siehe ![]() Die Bezeichnung ANSI bzw. EASCII scheint kein expliziter Standard zu sein, sondern umfasst mehrere Zeichensätze. Aber du hast wahrscheinlich recht und Matze nutzt im Moment ISO-8859-1 oder CP1252 und damit keine Untermenge von UTF-8. |
Re: Websiteumstellung auf UTF-8, wie geht's?
Dafür, dass Zeichensätze nicht zu deiner Spezialität gehören, hast du aber bemerkenswert klarsichtig beraten.
Ich freue mich auf weitere Beiträge von dir. Schönes Wochenende |
Re: Websiteumstellung auf UTF-8, wie geht's?
Zum Thema... um MySQL UTF-8 beizubringen (so wie ich es wollt) hab ich der Connection erst mal sagen müssen, dass sie überhaupt im UTF-8 Modus arbeiten soll.
Erst dannach ging alles wie gewünscht:
Code:
Wenn alle Stricke reissen notfalls eine Query:
// mysqli Object
$DB->set_charset("UTF-8"); // proceduraler ansatz mysql_set_charset("UTF-8", $dbconn);
Code:
mysql_query('SET CHARACTER SET "UTF-8"', $dbconn);
|
Re: Websiteumstellung auf UTF-8, wie geht's?
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Ronny,
danke, doch das funktioniert bei mir leider auch nicht. Dass das aber auch so kompliziert sein muss. :? Edit: Ich habe mal ein Testskript geschrieben, mit dem es auch nicht funktioniert. Vielleicht ist es dort einfacher, den Fehler zu finden. |
Re: Websiteumstellung auf UTF-8, wie geht's?
Viel rumgebastelt und den Fehler entdeckt, im Hex-Editor :drunken:
Am Anfang deines Files stehen die 3 UTF-8 Identify-Bytes, die werden noch vor der Header-Anweisung an den Browser geschickt, das feuert zumindest bei mir einen Fehler. Bei UTF-8 und PHP in Zusammenhang mit header(); dürfen die ID-Bytes in keinem fall verwendet werden. Hoffe das hilft jetz ;) EDIT: - die utf8_encode(); können übrigens auch wech... - das mit dem application knallt beim IE (zumindest bei mir) - das header(); von zeile 11 nach unten unter den Submit-Block Dann passt es... Viel Spass! :mrgreen: |
Re: Websiteumstellung auf UTF-8, wie geht's?
Hallo Ronny,
hm vielen Dank. Heißt das, ich muss nun bei allen meinen PHP-Dateien die ersten Bytes entfernen? :gruebel: Grüße |
Re: Websiteumstellung auf UTF-8, wie geht's?
Hab oben noch mal editiert...
Im Editor einfach einstellen, das UTF-8 ohne BOM bzw. Identify Bytes gespeichert werden soll... ja oder die ersten 3 Bytes vor dem ersten <? php löschen |
Re: Websiteumstellung auf UTF-8, wie geht's?
Dann teste ich das mal, dankeschön.
Nur schade, dass man bei Eclipse, im Gegensatz zu einigen anderen Editoren/IDEs, nur "UTF-8" auswählen kann und nicht "UTF-8 (ohne BOM)", wie es bei Notepad++ zu finden ist. Naja, irgendwie krieg ich das schon hin, wenn's wirklich nur daran liegt. Edit: Ich habe mir ein Tool heruntergeladen, das BOMs entfernt und richtig ist, dass beim Testprojekt diese Bytefolge enthalten war, bei meinem richtigen Projekt jedoch nicht. Dann liegt es doch nicht daran... :? |
Re: Websiteumstellung auf UTF-8, wie geht's?
Hab bei Eclipse eigentlich keine Probs mit dem BOM müsst evtl. mal schaun wo die Einstellung ist..
wenn du bereits UTF-8 als Codepage für die Abhandlung mit MySQL festlegst und dann noch utf8_encodest, encodest du quasi den UTF-8 string noch einmal... daher die Fehlzeichen |
Re: Websiteumstellung auf UTF-8, wie geht's?
Ah, ich habe den Fehler gefunden. Es waren nicht komplett alle PHP-Dateien konvertiert. :wall:
Die des Admin-Panels waren teils noch nicht im UTF-8-Format und somit wurden neue Blogeinträge, die ich darüber hinzufüge, falsch dargestellt, Kommentare, die über den öffentlichen Bereich eingegeben werden, jedoch richtig. Danke nochmals für eure Hilfe. Übrigens benötige ich das Query
SQL-Code:
nicht. Eclipse speichert die BOM-Bytes nicht mit, das kann diese IDE gar nicht und dass utf8_encode() und utf8_decode() nicht benötigt werden, gefällt mir auch sehr gut.
SET NAMES 'utf8'
Auf jedenfall waren eure Beiträge sehr interessant und ich habe einiges dazugelernt. :thumb: Matze Nachtrag: Nun hat FF aber noch seltsame Probleme (im IE geht alles wie es soll): Rufe ich im FF eine Seite auf, sehe ich dies als Inhalt: Zitat:
Den Cache habe ich bereits gelöscht, dennoch tritt dieses Problem auf. Was kann dies sein? |
Re: Websiteumstellung auf UTF-8, wie geht's?
DAs hab ich auch manchmal beim FF ... würde mich ebenfalls interessieren, wie man dem das so beibringt, dass die Automatik nich versagt ;)
|
Re: Websiteumstellung auf UTF-8, wie geht's?
Seltsam ist, dass ich das Phänomen nicht mehr reproduzieren kann, aber es kommt noch merkwürdiger:
Wenn ich diese russische Zeichenfolge eintrage: Zitat:
Zitat:
Ich euch nicht zu langweilen wird es nun noch spannender. :mrgreen: Ich kann im FF die Zeichenkodierung für meine Website nicht mehr umstellen, diese bleibt generell auf UTF-8 eingestellt, bei anderen Seiten geht es jedoch problemlos. :gruebel: Btw: Schön, dass die DP einigermaßen UTF-8 unterstützt, sonst wäre es schwer, das alles in Worte zu fassen. *g* Was kann die Ursache für diese Probleme sein? |
Re: Websiteumstellung auf UTF-8, wie geht's?
Keiner 'ne Idee? :cheer:
|
Re: Websiteumstellung auf UTF-8, wie geht's?
Kann an den Headern und am Quellcode liegen! Eine Beispielseite wäre hilfreich. Dann kann ich dir auch sagen was du sonst noch so alles falsch machst. :lol:
|
Re: Websiteumstellung auf UTF-8, wie geht's?
Liste der Anhänge anzeigen (Anzahl: 1)
Nun scheint alles zu funktionieren. Manche UTF8-zeichen benötigen "set names", andere nicht Fragt mich nicht wieso, ich habe es leider nicht nachvollzihen können. Auf jedenfall benötigt man "set names", wenn man die vollte UTF8-Unterstützung haben möchte.
Danke an alle und auch an Xong, der mir per PN noch ein paar Tipps gegeben hat. Nun muss ich das ganze mal online konvertieren und aktialisieren. Mal sehen, ob alles klappt, ich bin gespannt ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz