MySQL - alles mit utf8 ?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
ausgabe
code
datei
datenbank
datum
editor
erscheinen
form
format
header
problem
set
text
type
umlaut
url
vermerkt code
verzichten
zugriff
-
Hallo
wie stelle ich sicher, das alle Datenbank Abfragen und Antworten immer utf8 sind ?
$con = mysql_connect($db_server,$db_user,$db_pass); if (!$con) { echo "<br />Could not connect: <br />\n" . mysql_error(); exit; }
... so ...mysql_set_charset('utf8',$con);
... oder ...mysql_query("SET NAMES 'utf8'", $con);
... oder ...mysql_query("SET CHARACTER SET utf8", $con);
muss hier
nicht so:SET utf8
... also mit einfache Hochklammern ?SET 'utf8'
... oder ...
mysql_query( "SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8' ", $con);
... oder wie sonst ? ... bzw. welche Methode empfehlt Ihr mir ?
Danke!
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Also in der PHP Manual wird empfohlen, das über mysql_set_charset() zu regeln und es wird davon abgeraten, dies über einen Query zu tun. (http://php.net/manual/de/function.mysql-set-charset.php)
-
oder du machst es einfach so, wie man es mit mysql eben macht:
CREATE DATABASE IF NOT EXISTS <database_name> DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
von php her gesehen ist das eine einfachhe abfrage:
<?php //... $res = mysql_query(<<< EOT CREATE DATABASE IF NOT EXISTS <database_name> DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; EOT ); // obige abfrage gibt 'true' o. 'false' zurück, daher kann nut kommen: if($res) {...;} else {...;}
allerdings, damit ist das ding noch weitestgehend nicht gegessen ;)
um unnötiges an herumgetippsele und endlose editsessions wegen zahllosen fehlermeldungen zu vermeien, solltest du alles auf uft-8 umstellen: alle php, html, xml ... dateien; alle inserts in die datenbank sollten unter utf-8 stattfinden. im erzeugten html sollte dann stehen:<meta charset="utf-8" />
, auf die art brachst dann den ganzen ungetüm von ä, © und dergleichen nicht mehr ;) -
Du scheinst ja mehr Ahnung davon zu haben und hast auch shcon in mehreren Threads geholfen. Ich flipp hier aus weil ich irgendwo immer wieder auf diese Scheiße stoße.
Ich habe folgende Maßnahmen zur richtigen Koodierung betrieben:
- den Metatag im Header vermerkt
<meta charset="utf-8" />
- die Datenbank auf UTF-8 gesetzt
"utf8_unicode_ci"
- in meiner INDEX Datei einen Header vermerkt
header("Content-Type: text/html; charset=UTF-8");
- im FORM-Tag UTF-8 vermerkt
"accept-charset="utf-8"
Ergebnis:
HTML Texte die mit Umlauten geschrieben sind erscheinen korrekt
PHP Ausgaben die als Umlaute gespeichert sind erscheinen falsch
PHP Eingaben die als Umlaute gespeichert übertragen werden erscheinen korrekt
HTML Ausgaben die per Include abgerufen werden erscheinen falsch
Daher die Fragen ob das ausreichend ist?
Warum mein Include dennoch nicht funktioniert?
Etwas überflüssig ist?
Es auch einfacher geht anstatt in jedem Form-Tag das UTF8 zu vermerken?
Ich hab gegoooooogled aber ich will das jetzt ein für alle Mal aus der Welt schaffen, deswegen hier eine Antwort zu diesem leidigen Thema. Danke schon mal im Voraus für denjenigen der sich opfert.
Beitrag zuletzt geändert: 13.3.2013 10:56:28 von h4nni -
h4nni schrieb:
yepp! ich habe mal hier den obrigkeiten einmal vorgeschlagen, die datenbanken automatisch mit der einstellung utf-8 zu erstellen. es wurde abgelehnt ;) also alle sind nach wie vor auf sich gestellt.
... weil ich irgendwo immer wieder auf diese Scheiße stoße. ...
ich fasse mal zusammen:
1. alle deine html/php/xml/css/sql/wasauchimmer/... dateien sollst du als utf-8 speichern (du solltest das in deinem editor schon so eingestellt haben);
2. dein html (ob direkt oder durch php generiert) hat folgendes aussehen<!DOCTYPE ...> <html> <head> <meta charset="utf-8" /> <title>... ... <head> ...
und zwar in genau dieser reihenfolge (egal was andere dazu meinen ;) alsoheader("Content-Type: text/html; charset=UTF-8");
ist denkbar überflüßig.
3. du prüfst alle deine datenbanken auf charset und collation (ein gutes beispiel, wie das aussehen sollte istmysql> show create database mysql; +----------+----------------------------------------------------------------------------------------+ | Database | Create Database | +----------+----------------------------------------------------------------------------------------+ | mysql | CREATE DATABASE `mysql` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */ | +----------+----------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
) ist das nicht der fall, sollst du's mitALTER DATABASE <database> CHARACTER SET utf8 COLLATE utf8_unicode_ci
korrigieren.
4. du musst sicher sein, dass die daten in der datenbank auch selbst mit utf-8 gespeichert sind! das ist sogar sehr wichtig! sollte das nicht der fall sein, musst du es leider sozusagen zu fuß ändern, das widerum heißt, du musst die daten auslesen, in utf-8 konvertieren und wieder reinschreiben.
nach strikter einhaltung dessen, hast du keine berührung mehr mit der obrigen scheiße ;)
-
1. Ich denke mein Editor speichert alles standartgemäß in UTF-8. Steht zumindest bei default-Settings.
2. hab ich gemacht. Aber ohne den PHP Schnipsel geht es dennoch nicht! Also nur mit PHP Schnipsel geschieht eine korrekte Ausgabe des HTML Codes.
3. Nach meiner Ausgabe ist alles auf UTF-8, bis auf character_set_server. Da hab ich aber keinen Zugriff drauf.
4. Alle Daten in der DB sind in UTF-8 (also mit ausgeschriebenen Umlauten um die es bei mir hauptsächlich geht (üäö)
Sieht glaube ich auch gut aus jetzt.
Mein Problem liegt jetzt nur noch im Formular und PHP Code.
Wenn (nur wenn) ich den PHP Schnipsel drinne hab, erscheint die PHP Ausgabe (aus einem Array, nicht per Abfrage aus der DB) korrekt. Die Abfrage aber nicht. In die DB wird es aber korrekt geschrieben, also in UTF-8 Format. Also nach viel hin und her: die PHP Ausgabe wird nicht korrekt angezeigt. -
ich nehme es an, dein problem liegt nicht bei lima!? wo sonst?
h4nni schrieb:
was für problem genau?
1. Ich denke mein Editor speichert alles standartgemäß in UTF-8. Steht zumindest bei default-Settings.
2. hab ich gemacht. Aber ohne den PHP Schnipsel geht es dennoch nicht! Also nur mit PHP Schnipsel geschieht eine korrekte Ausgabe des HTML Codes.
3. Nach meiner Ausgabe ist alles auf UTF-8, bis auf character_set_server. Da hab ich aber keinen Zugriff drauf.
4. Alle Daten in der DB sind in UTF-8 (also mit ausgeschriebenen Umlauten um die es bei mir hauptsächlich geht (üäö)
Sieht glaube ich auch gut aus jetzt.
Mein Problem liegt jetzt nur noch im Formular und PHP Code.
was für php schnipsel, was für php ausgabe ... könntest du ein bisschen code zeigen?
Wenn (nur wenn) ich den PHP Schnipsel drinne hab, erscheint die PHP Ausgabe (aus einem Array, nicht per Abfrage aus der DB) korrekt. Die Abfrage aber nicht. In die DB wird es aber korrekt geschrieben, also in UTF-8 Format. Also nach viel hin und her: die PHP Ausgabe wird nicht korrekt angezeigt. -
Die Seite bei der ich Probleme habe liegt auf einem anderen Server gerade.
Mit "php-Schnipsel" meinte ich
header("Content-Type: text/html; charset=UTF-8");
Darauf kann ich nicht verzichten, sonst wird per PHP nicht korrekt ausgegeben.
Das Problem ist jetzt die Ausgabe mittels mysql_query. Es steht korrekt in der DB, aber bei der Ausgabe bekomme ich "?" anstelle der Umlaute.
$select = mysql_query("SELECT usw..."); $ausgabe = mysql_fetch_array($select);
-
h4nni schrieb:
gaaaanz eine blöde frage: was für ein zeichensatz ist in deinem browser eingestellt? wenn 'ISO-8859-*' ist, dann solltest du auch das ändern.
Die Seite bei der ich Probleme habe liegt auf einem anderen Server gerade.
Mit "php-Schnipsel" meinte ich
header("Content-Type: text/html; charset=UTF-8");
Darauf kann ich nicht verzichten, sonst wird per PHP nicht korrekt ausgegeben.
Das Problem ist jetzt die Ausgabe mittels mysql_query. Es steht korrekt in der DB, aber bei der Ausgabe bekomme ich "?" anstelle der Umlaute.
$select = mysql_query("SELECT usw..."); $ausgabe = mysql_fetch_array($select);
-
Ebenfalls UTF-8. Habs auch mit mehreren Browsern getestet.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage