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

Kodierung - Fehler

djfabi

Mitglied
Hallo,

in meinem neuen Projekt habe ich Login, Registrierung.. etc

Also man Registriert sich, und dann ist man halt auch schon eingeloggt..
Wie genau mache ich das, dass ich z.B. Namen wie 'Kölo Jälku' ohne das Probleme mit den Umlauten auftreten?

Ich habe schon folgendes gemacht:
-Bei der Registrierung wird aus dem Name : "Koulo Jaelku'
-bei der Ausgabe wird es dann wieder normal

Ich habe also zwei Funktionen, welche die Umlaute (z.B. Ä => Ae) machen.

Und bei der Ausgabe aus z.B. Ae => Ä

Das Problem:
Bei dem Namen Michael ist kein ä, aber trotzdem (ae=>ä) wird das gemacht.

Nun muss ich also eine andere Lösung finden.

Ich habe schon das UTF-8 Meta Tag & ein PHP header mit UFT-8 gesendet.

Wie mache ich das jz das in der Datenbank nicht so ein kryptisches Zeug steht?

PHP:
<meta http-equiv='content-type' content='text/html; charset=utf-8' />


header('Content-Type: text/html; charset=utf-8');
 
Zuletzt bearbeitet:
die funktion kenn ich garnicht^^
php datei als utf8 ohne bom speichern und den utf8 metatag setzen. die collation der tabelle auf utf8_general_ci setzen.
 
ok, die Datenbank habe ich schon auf utf8_general_ci gestellt, wenn ich über mein phpmyadmin Interface einen Datenbank mit einem Umlaut eingebe funktioniert das ja auch alles, aber wenn ich über eine HTML Form, mithilfe von PHP es in die Datenbank eintrage kommt sowas bei heraus:

(bei dem Name: "Dümitri Köäze")

Dümitri Köäze

Also da steht dann wieder nur so ein Schrott..
Und die Ausgabe mit PHP:
Dümitri Köäze


Also der gleiche Murks.

Wie ist das Problem?
 
Wie das Problem ist? Erklärbar ;)

Mögliche Ursachen:
Du hast mysql_set_charset nicht verwendet oder alternativ auch kein SQL-SET-Statement abgeschickt bevor Du irgendein andere Statements an MySQL übergibst.
Deine Datenbank ist nicht utf8.
Deine Datenbanktabellen sind nicht utf8.
Der HTTP-Header deiner Webseite ist nicht utf8.
Der Zeichensatz der PHP-Datei ist nicht utf8.
 
Wie das Problem ist? Erklärbar ;)

Mögliche Ursachen:
Du hast mysql_set_charset nicht verwendet oder alternativ auch kein SQL-SET-Statement abgeschickt bevor Du irgendein andere Statements an MySQL übergibst.
Deine Datenbank ist nicht utf8.
Deine Datenbanktabellen sind nicht utf8.
Der HTTP-Header deiner Webseite ist nicht utf8.
Der Zeichensatz der PHP-Datei ist nicht utf8.

Ohh man, mein Deutsch :DD

Also muss ich praktisch vor jeder SQL Abfrage das SQL-SET-Statement machen?
Also wirklich bei jeder Datenbankabfrage?

Datenbank - überprüft, uftf8_general_ci
Datenbanktabellen - the same/überprüft, uftf8_general_ci
HTTP-Header: Doch auf jeder:
PHP:
header('Content-Type: text/html; charset=utf-8');
&& auch das Meta-Tag:
PHP:
<meta http-equiv='content-type' content='text/html; charset=utf-8' />

Zeichensatz: wie ist das genau gemeint?
Danke aber erstmal :)
 
die header angabe selbst hinzuzufügen ist überflüssig, das mysql set charset auch.
es ist sogar überflüssig die tabellen auf utf8 einzustellen, lediglich in verwaltungsprogrammen wie phpmyadmin erhällt man dort falsche zeichen. man kann in einem ISO 8859-1 feld utf8 daten speichern.

die php datei muss als utf8 (ohne bom, aber das ist auch nicht zwingend erforderlich) abgespeichert werden und der erzeugte html code muss den utf8 metatag enthalten. sowohl die datei die speichert, als auch die datei zum anzeigen.
 
Das hat doch mit Umlauten nichts zu tun.
utf8_encode wandelt ISO-8859-1 in UTF-8 um. Es können sehr lustige Dinge passieren, wenn man die Funktion 2 Mal hintereinander aufruft.

Ich selbst bin für's selber machen, weil man sich gleich um mehrere Zeichen kümmern kann.

2 Funktionen:
PHP:
function mutate_sonderzeichen($text)
{
   $text = str_replace("ö","&ouml;",$text);
   $text = str_replace("ä","&auml;",$text);
   $text = str_replace("ü","&uuml;",$text);
   $text = str_replace("Ö","&Ouml;",$text);
   $text = str_replace("Ä","&Auml;",$text);
   $text = str_replace("Ü","&Uuml;",$text);
   $text = str_replace("ß","&szlig;",$text);
   return $text;
}

function demutate_sonderzeichen($text)
{
   $text = str_replace("&ouml;","ö",$text);
   $text = str_replace("&auml;","ä",$text);
   $text = str_replace("&uuml;","ü",$text);
   $text = str_replace("&Ouml;","Ö",$text);
   $text = str_replace("&Auml;","Ä",$text);
   $text = str_replace("&Uuml;","Ü",$text);
   $text = str_replace("&szlig;","ß",$text);
   $text = str_replace("&nbsp;"," ",$text);
   $text = str_replace("&nbsp;"," ",$text);
   $text = str_replace("\r","",$text);
   $text = str_replace("\n","",$text);

   return $text;
}
Selbstgestrickt deshalb, weil man sich aller Zeichen annehmen kann, die von den Vorgabefunktionen vernachlässigt werden. Da kann man z.B. auch BOM-Argumente einbauen oder Bildchen verändern und und und.

Bei mir sind die beiden Funktionen Standard in jedem Script.

Wichtig sind die oben genannten Punkte und eine korrekte Codierung der Ausgabedatei. Dieses ISO-Gemurkse ist mir schon immer ein Dorn im Auge gewesen.
 
Zuletzt bearbeitet von einem Moderator:
Danke an alle, habs aber jz selber gelöst.
Habe diese SETs gemacht. Außerdem unterlief mir ein dummer Fehler, welcher das Problem auslöste.

es war htmlspecialchars()
Sie hat es verursacht. Ich habe jetzt einfach nur strip_tags() gemacht.

Funktioniert alles, danke :)
 
Zurück
Oben