Ankündigung

Einklappen
Keine Ankündigung bisher.

MySQL-Query-Problem mit Umlauten

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MySQL-Query-Problem mit Umlauten

    Ich frage eine Pflanze von einer MySQL-DB ab und wenn es eine zugehörige weitere Pflanze gibt, diese ebenfalls. Das funktioniert in einem Fall, bei einem jedoch nicht. Im ersten Fall werden keine Umlaute verwendet.

    Im Fehlerfall werden Umlaute verwendet. Es wird 'Erdäpfel' über eine Maske eingegeben und abgefragt und wird korrekt ausgegeben. Über Erdäpfel findet er in der DB auch 'Erdäpfel frühreifend'. Hier bekommt er keine Sätze, obwohl einer vorhanden ist. Wenn ich das via ECHO rausgeschriebene SQL in phpMyAdmin unter SQL reinkopiere und abfrage, funktioniert dies auch. Ebenfalls wenn ich die zugehörige Pflanze direkt über die Maske eingebe, wird es gefunden.

    Ich habe sowohl meine php-Elemente, die DB als auch den HTML-Code als UTF8 durchgehend angegeben. Habe schon versucht, mit iconv und mit utf8_encode umzuwandeln, ohne Ergebnis.

    Als $result (von '$Conn->query($sql)') wird geliefert:
    object(mysqli_result)#3 (5) { ["current_field"]=> int(0) ["field_count"]=> int(14) ["lengths"]=> NULL ["num_rows"]=> int(0) ["type"]=> int(0) }

    In welchem Code sollte sich auch der eingegebene Begriff sich vom abgefragten unterscheiden???

  • #2
    Hast du im HTTP-Header UTF-8 angegeben?
    Hast du bei der Datenbankverbindung UTF-8 angegeben?

    Kommentar


    • #3
      Du meinst:
      <meta http-equiv="content-type" content="text/html; charset=utf-8">

      Wie gebe ich bei der Datenbankverbindung UTF-8 an? Die Relationen selbst sind ja in UTF-8.
      Wie gesagt, es funktioniert in den anderen Fällen auch mit Umlauten auch nicht anders und da geht es!

      Kommentar


      • #4
        Nein, HTTP(!) Header, nicht das HTML-meta-Tag. http://php-de.github.io/jumpto/utf-8/#konsequent-utf-8

        Und: http://php.net/manual/de/mysqli.set-charset.php

        Kommentar


        • #5
          Danke für die Info.

          Für die Datenbankverbindung hatte ich
          $mysqli->query("SET NAMES 'utf8'");
          und habe ich jetzt ersetzt durch:
          $mysqli->set_charset("utf8");

          Den Heder habe ich jetzt auch gesetzt, bei den Formulardaten accept-charset ergänzt und meine htmlentities mit allen Parameters ergänzt wie angegeben. Hat aber nichts bewirkt.

          Ich kann nicht ersehen durch einen dump, in welchem Character-Set sich ein String befindet. Wie kann ich das ersehen?

          Kommentar


          • #6
            Danke, ist gelöst. Ich überprüfte mit mb_detect_encoding, ob UTF-8 vorlag. Wenn concateniert wird oder ein Replace durchgeführt wird und ein Teil in ASCII, ist interessanterweise der ganze String in ASCII. Dies ist dadurch entstanden, da eine Funktion sowohl eine Aufbereitung für HTML mit htmlentities als auch für eine neue Abfrage eine Aufbereitung macht.

            Wenn ein String in ASCII ist (laut mb_detect_encoding), ist mir eine Umwandlung mit utf8_encode gelungen, das Ergebnis war nach wie vor in ASCII!? Aber das habe ich jetzt anders gelöst.

            Kommentar


            • #7
              mb_detect_encoding() ratet nur das Encoding. Darauf kann man sich nie verlassen. Es gibt keine zuverlässige Methode um ein Encoding anhand von Nutzdaten festzustellen. Man ist immer von den Angaben im Header bzw. vom BOM abhängig.

              Kommentar

              Lädt...
              X