Php + Mysql + 'ü' = �

  • PHP

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von thefiloe.

    Php + Mysql + 'ü' = �

    Ich versuche mich zur Zeit ein wenig mit PHP. Somit habe ich einmal MYSQL ausprobiert was an sich auch klappt. Einziges Problem:
    Ü's werden von PHP falsch ausgegeben. Aus einem Ü wird ein
    �.
    .
    In der Datenbank verwende ich zum Speichern des Textes einfach VARCHAR und in PHP verwende ich zum Abfragen eben die ganz normalen Funktionen.
    Aber ich denke ich poste hier mal den Code:

    SQL-Abfrage

    1. CREATE TABLE IF NOT EXISTS Message(
    2. ID INT PRIMARY KEY AUTO_INCREMENT,
    3. Caption VARCHAR(45) NOT NULL,
    4. `Text` VARCHAR(500),
    5. Picture VARCHAR(200),
    6. Duration TIMESTAMP NOT NULL
    7. );


    Jetzt sagen wir mal speichere ich in Caption den Wert "Überschrift". Mache ich nun einen Select in meiner Workbench funktioniert alles wunderbar. Verwende ich ich jedoch PHP kommt das oben genannte Zeichen raus:

    PHP-Quellcode

    1. $con = mysqli_connect("localhost", "root", "", "rems");
    2. if(mysqli_connect_errno())
    3. {
    4. echo "Keine Verbindung zur Datenbank!";
    5. }
    6. else{
    7. $result = mysqli_query($con, "SELECT * FROM Message WHERE ID = $id");
    8. if($result)
    9. {
    10. if(($row = mysqli_fetch_array($result)))
    11. {
    12. $article = new MockArticle();
    13. $article->caption = $row['Caption'];
    14. $article->pictureUrl = $row['Picture'];
    15. $article->text = $row['Text'];
    16. $template = new Template('./templates/SampleTemplate.html');
    17. $article->SetupTemplate($template);
    18. echo $template->getOutput();
    19. }
    20. }
    21. mysqli_close($con);
    22. }


    Kann mir da jemand weiterhelfen?
    Wäre wirklich froh, da ich bis jetzt leider nichts vergleichbares gefunden habe. Eben nur Probleme wie "ich kann keine Sonderzeichen in MYSQL speichern" -> kann ich aber. Nur PHP macht Probleme.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Bringt

    PHP-Quellcode

    1. header('Content-Type: text/html; charset=utf-8');

    eine Verbesserung?
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Ich habe das jetzt einfach über dem connect eingefügt. Leider keine Veränderung. Ich hatte auch versucht den Text "Überschrift" aus der Datenbank noch vorher durch utf8_decode zu jagen. Leider auch kein Erfolg.

    Habe so eine halbe Lösung gefunden:
    mysqli_set_charset($con, 'utf8');

    Wieso das jedoch so kompliziert gemacht werden muss, weiß ich auch nicht :(.
    EDIT2: Habe folgendes ebenfalls versucht:
    ALTER TABLE `rems`.`message` CHARACTER SET = utf8 ;
    Hat leider auch nicht hingehauen.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „thefiloe“ ()

    "Über dem Connect" ist nicht immer der richtige Einsteigspunkt, um was an den HTTP-Headern zu ändern. ;)
    Ich bezweifle aber auch, dass alleine die Änderung des Content-Charsets es richtig in die Datenbank einträgt. :P

    Sind die VARCHAR-Felder der Tabelle auch alle als UTF-8 kodiert? Wenn nicht, kannst du ja im PHPMyAdmin (falls du es hast), die Collation einer Spalte, der Tabelle oder auch der ganzen Datenbank umstellen. (bin jetzt mal davon ausgegangen, dass PHP sie auch falsch in die DB eingetragen hat)
    Siehe hier: stackoverflow.com/q/367711/785210
    Von meinem iPhone gesendet
    Ü's werden von PHP falsch ausgegeben

    Daher nahm ich einfach mal an, dass es in der Datenbank soweit korrekt war. Wie sieht es da denn nun aus?
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Ach ja was ich noch vergessen habe zu erwähnen ist, dass das Ganze über Ajax abgerufen wird. Aber ich denke nicht, dass das einen Unterschied macht. Ansonsten im HTML-Header steht schon seit Anfang an der entsprechende Tag drinnen:
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Hast du die php Datei als UFT8 Gespeichert ??
    Ich hatte mal sowas ähnliches und nachdem ich es als UFT8 Gespeichert habe ging es.

    Als Editor nutze ich Sublime Text

    Das Problem kenne ich mit AJAX und doch, das macht ein Problem, denn dem AJAX Request ist das Encoding der Datei und des Dokumentes egal.

    Ich habe es so gelöst, weil ich ja weiß das manche Funktionen in PHP nur über AJAX aufgerufen werden, verwende ich dort einfach eine Schleife welche durch den POST geht und alles mit utf8_decode() wieder zu normalen Zeichen macht. Eine andere Lösung habe ich für mich leider noch nicht finden können.
    uft8_decode geht nicht(steht irgendwo auch weiter oben).
    Ich denke die einfachste Lösung ist diese:

    PHP-Quellcode

    1. mysqli_set_charset($con, 'utf8');


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.