PHP-Entwicklung
Posts 1-10 of 10
-
René Dollhopf Premium MemberThe company name is only visible to registered members.Hallo zusammen,31 May 2010, 6:09 pmAnpassung deutscher Zeichensatz
Anpassung deutscher Zeichensatz (Umlaute und Sonderzeichen) an PHP5.3.1 – MySQL 5.1.36-log. – Wir haben einen neuen IBM-X Series-Webserver mit o.g. PHP-Version. Nach dem Umzug von dem alten Server mit PHP5.2.1 auf die neue Version konnten alle Kundenwebsites angepasst werden und laufen einwandfrei. Aber es gibt einen kleinen hartnäckigen Fehler.
Das Problem, kurz umrissen, liegt in der PHP-Verarbeitung mit Umlauten und Sonderzeichen. Beispiel aus einem xt-commerce Shop,
Kategoriename : „Hörbuch“ wird fehlerhaft dargestellt (H?rbuch)
Produktname: „ABC-Hörbuch“ wird fehlerhaft dargestellt (ABC-H?rbuch)
Produktbeschreibung, wird in einem separaten Texteditor erstellt: Keine Probleme mit Umlauten und Sonderzeichen.
Die automatisch generierten Antwort- / Bestätigungsmails aus dem XT-Shop kommen mit Schreibfehlern beim Käufer an. (hat alles bei 5.2.1 funktioniert) und diese Fehlfunktion betrifft nicht nur diesen Shop sondern auch andere Programme.
Bei dem DATA BECKER Programm protal-to-date2.0 gibt es die Funktion Einladungsmails (ähnlich Facebook) mit vorgefertigten Texten zu versenden. Die in der unversendeten Fassung richtigen Texte werden nach dem Versenden beim Empfänger fehlerhaft dargestellt.
Also überall dort wo TEXT mit PHP verarbeitet werden muss. Bislang sind wir schon soweit das es irgendwie in der Verarbeitung mit der Datenbank liegen und irgendetwas mit „Character Settings“ zu tun haben muss.
Unsere Serveradministratorin kommt da z.Zt. leider nicht weiter und ich, der Autor, habe nur ein „profundes Halbwissen“ von dem. Hat jemand von Euch eine Idee an welchen Schrauben man drehen kann/muss ? Vielen Dank vorab.
Rene Dollhopf
-
Jürgen NantkeThe company name is only visible to registered members.Hallo Herr Dollhopf,31 May 2010, 6:50 pmRe: Anpassung deutscher Zeichensatz
sie müssen für die SQL-Verbindung den entsprechenden Zeichensatz setzten.
Entweder in jeder Applikation mit mysql_set_charset oder in der MySQL Konfigurationsdatei generell.
Vermutlich war auf Ihrem alten Server dort latin1 eingestellt und in der neuen Installation UTF-8.
Mit freundlichen Grüßen
Jürgen Nantke
------
mysql_set_charset
(PHP 5 >= 5.2.3)
mysql_set_charset — Sets the client character set
Beschreibung
bool mysql_set_charset ( string $charset [, resource $link_identifier ] )
Sets the default character set for the current connection.
Parameter Liste
charset
A valid character set name.
Verbindungs-Kennung
Die MySQL-Verbindung. Wird die Verbindungskennung nicht angegeben, wird die letzte durch mysql_connect() geöffnete Verbindung angenommen. Falls keine solche Verbindung gefunden wird, wird versucht, eine Verbindung aufzubauen, wie es beim Aufruf von mysql_connect() ohne Angabe von Argumenten der Fall wäre. Falls zufällig keine Verbindung gefunden oder aufgebaut werden kann, wird eine Warnung der Stufe E_WARNING erzeugt.
Rückgabewerte
Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.
Anmerkungen
Hinweis: This function requires MySQL 5.0.7 or later.
-
Daniel Schlichtholz Premium MemberThe company name is only visible to registered members.Hallo,01 Jun 2010, 09:09 amRe^2: Anpassung deutscher Zeichensatz
zuerst einmal sollte geprüft werden, ob die fehlerhaft dargestellten Texte tatsächlich in der Datenbank liegen.
Oft liegen Mail-Bestätigungstexte gar nicht in der Db sondern als Sprachdateien in PHP-Dateien vor. Wenn dies der Fall ist, dann sind die PHP-Dateien eventuell in einem falschen Zeichensatz gespeichert worden. Hier hilft dann die Konvertierung der Dateien per iconv oder über einen Text-Editor, der in verschiedenen Zeichensätzen speichern kann (Notepad++ z.B.).
Sind die Texte in der DB, dann sollte zunächst geprüft werden, ob lediglich das Auslesen durch die Applikation in einem falschen Zeichensatz geschieht oder ob die Daten bereits falsch kodiert in der DB abgelegt wurden. Hierzu empfehle ich einen Test über das Skript MySQLDumper. Im dortigen SQLBrowser kann man sich die Tabelleninhalte anzeigen lassen (MSD stellt beim Auslesen von Daten die Verbindung zur DB explizit auf utf8 und gibt sie auf einer utf8-Seite aus). Werden die Daten hier korrekt angezeigt aber in der Applikation nicht, dann liegt das Problem auf der Ausgabeseite. Aber auch hier gibt es wieder 2 mögliche Fehlerquellen:
- die Webseite wird im Header mit dem Zeichensatz ISO 8859-1 angekündigt, tatsächlich werden die Zeichenketten aber als utf-8 ausgeliefert (oder umgekehrt) -> Parameter in der Applikation suchen, die den Header sendet und entsprechend anpassen (das kann man leicht prüfen, indem man z.B. im Firefox unter Ansicht / Zeichenkodierung den Zeichensatz einfach umstellt. Werden danach die Zeichen korrket dargestellt, dann liegt es lediglich am gesendeten Header, der einen falschen Zeichensatz ankündigt. Hat man Mischmasch aus falsch und korrekt dargestellten Umlauten, ist die Quelle zu lokalisieren (Datei oder DB?)
- ist die Db der Übeltäter, dann muss man die Inhalte korrigieren. Zunächst sollte aber sichergestellt sein, dass man eine MySQL-Version von mindestens 4.1.2 betreibt, da davor der sichere Umgang mit Zeichensätzen nicht gewährleistet ist. Vor Version 4.1.2 kennt MySQL noch kein utf8, was natürlich zwangsläufig zu Problemen führt, wenn die Seite in utf8 ausgegeben wird. Falls das der Fall ist, sollte unbedingt zunächst der MySQL-Server aktualisiert werden. Zur nachträglichen Anpassung von Umlauten direkt in der DB (meistens nach einem Umzug von MySQL 4.0.x auf eine höhere Version) habe ich ein kleines Programm geschrieben, welches in diesem Artikel verlinkt ist:
http://forum.mysqldumper.de/die-umlautproblematik-was-wieso-...
Dort sind auch noch weitere Artikel verlinkt, die alle notwendigen Informationen zu dieser - leider nicht ganz trivialen - Problematik liefern sollten.
- ist der Header korrekt und dennoch werden die DB-Inhalte falsch angezeigt, dann ist der Fall eingetreten, den mein Vorposter völlig korrekt angesprochen hat. Dann kümmert sich die Applikation nicht korrekt um die Einigung auf einen Zeichensatz mit MySQL und bekommt die Daten in einer anderen Kodierung, als erwartet. Nun kann man den Standardzeichensatz von MySQL entsprechend konfigurieren, damit die App. das bekommt, was sie erwartet, was aber ein ungünstiger Workaround ist, da so eventuell andere Applikationen beeinträchtigt werden. Der sinnvollere Weg ist, die Applikation zu aktualisieren. Mittlerweile setzen alle größeren OS-Projekte den Zeichensatz korrekt, so dass wahrscheinlich ein Update der Software ausreichend ist.
So, ich hoffe, dieses etwas ausführlichere Posting hilft Dir beim Ausradieren des Fehlerteufels. Viel Erfolg. ;)
Mit herzlichem und umlautfehlerfrien Gruß,
Daniel Schlichtholz
This post was modified on 01 Jun 2010 at 09:12 am. -
Norbert Nothdurft Premium MemberThe company name is only visible to registered members.Hallo Herr Dollhopf,01 Jun 2010, 10:51 amRe^3: Anpassung deutscher Zeichensatz
schauen Sie mal ob die Mails ein Encoding mitliefern. Im Mozilla Thunderbird können Sie unter
Ansicht -> Zeichenkodierung
schauen, welche Kodierung aktuell genutzt wird und diese testweise mal abändern.
Wenn durch ein Umstellen von / nach UTF8 bzw ISO 8859-1 die Mail richtig dargestellt wird, dann müssen Sie dem XT-Commerce im Mailversand noch die richtige Codierung mitgeben.
Noch eine kleine Anmerkung zu meinem Vorposter: Wenn es um abgelegte Texte oder auch um SQL-Dumps geht, die ins richtige Encoding gewandelt werden müssen, hilft das kostenlose Notepad++ in aktueller Version hervorragend weiter. Ich habe neulich in einem ähnlichen Falls einige DB-Dumps als ISO gezogen mit Notepad++ nach UTF8 konvertiert und auf der neuen Maschine als UTF 8 wieder importiert.
Es gibt da noch ein paar kleine Stolperstellen, je nachdem ob Ihr XT als UTF 8 oder als ISO läuft.
Falls Sie da weitere Hilfe benötigen, schreiben Sie mich einfach direkt an.
Grüße aus Berlin
This post was modified on 01 Jun 2010 at 10:58 am. -
Axel HelmertThe company name is only visible to registered members.Zu MySQL und Charset:23 Jun 2010, 2:28 pmRe^4: Anpassung deutscher Zeichensatz
Man kann MySQL einfach sagen welches character set es verwenden soll um den Dump zu verarbeiten.
cat dump.sql | mysql --default-character-set=utf8 dbname
Die Charset-Sache ist immer etwas übel, generell sollte man in der ganzen Umgebung darauf achten ein konsistentes Character-Set zu verwenden.
Bei xt:c ist es wahrscheinlich ISO-8859-15 (Da die ganzen php scripte oder auch templates wohl mit diesem charset zusammengehackt wurden).
Bei Magento ist es standerdmäßig UTF-8.
In Debian Distributionen ist der Standard UTF-8 außer bei MySQL, da ist es inkonsistenterweise latin1 (ISO-8859-1).
-
Post visible to registered members
-
Dragos Ardeleanu Premium MemberThe company name is only visible to registered members.Wäre HTML Entities eine Lösung ? ä Ä ß und so weiter.13 Oct 2010, 2:16 pmRe: Anpassung deutscher Zeichensatz
-
Post visible to registered members
-
Post visible to registered members
-
Post visible to registered members
