kostenloser Webspace werbefrei: lima-city


MySQL - alles mit utf8 ?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    mygeld

    mygeld hat kostenlosen Webspace.

    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
    SET utf8
    nicht so:
    SET 'utf8'
    ... also mit einfache Hochklammern ?

    ... 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!
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. t**k

    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)
  4. 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 &auml;, &copy; und dergleichen nicht mehr ;)
  5. 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
  6. h4nni schrieb:
    ... weil ich irgendwo immer wieder auf diese Scheiße stoße. ...
    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.

    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 ;) also
    header("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 ist
    mysql> 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 mit
    ALTER 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 ;)
  7. 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.
  8. ich nehme es an, dein problem liegt nicht bei lima!? wo sonst?
    h4nni schrieb:
    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 problem genau?


    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.
    was für php schnipsel, was für php ausgabe ... :-o könntest du ein bisschen code zeigen?
  9. 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);
  10. h4nni schrieb:
    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);
    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.
  11. Ebenfalls UTF-8. Habs auch mit mehreren Browsern getestet.
  12. probiers mal damit:
    $str = mb_convert_encoding($str,"UTF-8","auto");
  13. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!