• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Link mit Umlaut

Status
Für weitere Antworten geschlossen.

Körnerbrötchen

Aktives Mitglied
Hey Leute,
ich bau mir gerade eine Datenbank mit Wallpapern auf. Nun trifft es sich, dass ein Wallpaper einen Namen mit einem Umlaut (ü) besitzt. Dieser Name wird aus der Datenbank geladen und schließlich als Link im Code ausgegeben. Leider funktioniert das Ganze aber nicht, denn anstatt dass Firefox beim Anklicken des Links schön die Umlaut-üs in %C3% umwandelt, wandelt er sie in %FC um (und ich bin doch nun wirklich kein Köln-Fan ;)). Ich habe keine Ahnung wieso, aber es ist so. Linke ich auf das Bild direkt ohne den Namen aus der Datenbank zu laden, klappt's wunderbar. Irgendwie hab ich das Gefühl, dass es an der Zeichenkodierung liegt (wo ich aber iwie nie so ganz durchblicke, denn speicher ich ein Dokument bei mir in gedit als UTF-8 ab, so wird im Validator iso-8859-1 gefunden).
Jemand Tips und Tricks?

Hier noch der Link zu meinem Beta-Code (höchste Geheimhaltungsstufe^^).

Grüße und danke schon einmal,
Korny
 
Versuchs doch mal indem du auf urlencode($bildname) verlinkst. Der Umlaut wird ja korrekt dargestellt, daher sollte es doch eigentlich nicht an der Kodierung liegen.
 
Das liegt tatsächlich am Encoding. Ich bin daran auch verzweifelt aber es gibt zum Glück Lösungswege. Es ist zwingend notwendig das man verschiedene Encodings _nicht_ mischt. Folgende Punkte sind zu beachten bei der Verwendung mit einer MySql-Datenbank:

1. Der aller erste Befehl der an eine MySql-Datenbank gesendet werden muss ist: "SET NAMES utf-8".

2. Der Server muss explizit die Daten als UTF-8 encoded senden. Deshalb muss ein entsprechender Header gesendet werden: "Content-encoding: utf-8"

3. Alle Dokumente deines Projektes sollten als UTF-8 encoded gespeichert werden.

Zudem musst du für alle verarbeiteten Strings die Multibyte-Funktionen (webhosting24 - Login) von PHP verwenden, da Sonderzeichen in UTF-8 anders behandelt werden. Wendest du z.Bsp. strlen() auf einen UTF-8 encodeten String an ist das Ergebnis ein anderes als wenn du die Funktion mb_strlen() auf den selben String anwendest (Der String muss natürlich Sonderzeichen enthalten damit man den Unterschied sieht). Grund ist das Sonderzeichen mit 2 Bytes encoded werden, die "normalen" (nicht Multi-Byte) Funktionen von PHP aber nur 1 Byte benutzen ergo nicht das komplette Zeichen erfassen.
 
Gut, vielen Dank schon einmal für diesen Hinweis. Dann komme ich aber auch schon zu meinem nächsten Problem. Wieso speichert gedit nicht in UTF-8, obwohl es die Standardeinstellung ist?
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben