Ankündigung

Einklappen
Keine Ankündigung bisher.

UTF-8: Stringvergleich?!

Einklappen

Neue Werbung 2019

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

  • UTF-8: Stringvergleich?!

    Hallo Community,


    Ich lese aus einer MySQL-Datenbank (Kollation: utf8_general_ci) einen String aus. Der Returnstring ist z. B. $str = "AÌÍåæïðø" ... (also String mit Sonderzeichen).

    Wie kann ich Returnstring explit auf ein Zeichen, z. B. "Ì", abfragen?

    PHP-Code:
      $sign="Ì";
      
    $len mb_strlen($str);
      for(
    $i=0$i $len$i++) {
        echo 
    htmlentities($str[$i])."<br>";
        if (
    $sign==$str[$i]) { //funktioniert leider nicht!
         
    ...
        }
      } 
    Vielleicht kann mir wer weiterhelfen - DANKE !

    LG


  • #2
    Was heißt
    abfragen
    ?
    Position bestimmen, Existenz prüfen, auslesen oder was?

    Ach so, [$i] meinst Du: mb_substr!
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      String-Iteration, String auf bestimmte Zeichen überprüfen ...

      mb_substr($str[$i],$i,1,'utf-8') hab ich aber auch schon verwendet, funktionierte aber auch nicht

      Kommentar


      • #4
        Deine Quellcodedatei ist in UTF-8 kodiert?

        PHP-Code:
        <?php

        $sign 
        'Í';
        $str  "AÌÍåæïðø";

        if (
        false !== mb_strpos($str$sign)) {
            echo 
        "$sign ist in $str vorhanden.";
        }

        Kommentar


        • #5
          ja, abgespeichert unter UTF-8 (ohne BOM)

          Kommentar


          • #6
            @mermshaus: Danke für deinen Code, der funktioniert prinzipiell - nur wenn ich den String $str direkt von der MySQL-Datenbank auslese, dann funktioniert es nicht mehr.

            Ohne htmlentities wird der String bei mir generell nicht richtig angezeigt, sondern nur z. B. Aaaaaaaa�������

            Kanns an MySQL liegen?!

            Kommentar


            • #7
              Vermutlich ist das Charset der Verbindung falsch: PHP: mysql_set_charset - Manual

              (Dort muss es 'utf8' heißen, nicht 'utf-8', wenn ich mich richtig erinnere.)

              Das Charset der HTML-Ausgabe kannst du über einen Header setzen:

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

              Kommentar


              • #8
                5 Dinge bei PHP, MySQL und UTF-8:
                - Datenbank muss selbst mit UTF-8 deklariert sein (das schliesst mit ein, dass die Daten darin es bereits auch sind)
                - Die Datenbankverbindung muss auf UTF-8 (SET NAMES utf gestellt sein.
                - Deine PHP-Dateien sollten UTF-8 kodiert von deinem Editor gespeichert worden sein (ohne BOM)
                - Der Content-Type Header muss text/html; charset=UTF-8 sein. Entweder also explizit per header() festlegen, oder gleich im Serversetup einstellen.
                - Zuletzt nicht schaden tut ein <meta http-equiv> mit entsprechender Einstellung aus dem vorherigen Punkt.

                Wenn du immernoch falsche Zeichen dargestellt bekommst, siehe hier
                "Mein Name ist Lohse, ich kaufe hier ein."

                Kommentar


                • #9
                  Habe
                  PHP-Code:
                  echo "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">" 
                  drinnen - jetzt explizit Deine Version probiert - leider hat sich nichts geändert ...

                  Die Daten in MySQL wurden mit UTF-8 auch importiert - glaube dort liegt der Fehler eher doch nicht.

                  eine Abfrage mit
                  PHP-Code:
                  select * ... name="aäüößÄÖÜÌÍåæïðø"
                  funktioniert

                  Kommentar


                  • #10
                    @Chriz: Danke für Deinen Kommentar
                    Bis auf (SET NAMES utf hab ich alles - okay, das ist das nächste was ich probiere

                    Dein "hier"-Link verweist auf diese Seite?!

                    Kommentar


                    • #11
                      oh verdammt, das set names utf8 - an dem liegts wirklich *grübel*

                      Kommentar


                      • #12
                        Bis auf (SET NAMES utf hab ich alles
                        Leider ist gerade das sehr elementar. Kann allerdings auch sein, dass in Deiner DB bereits die Daten in falschem Zeichnsatz vorliegen.
                        --

                        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                        --

                        Kommentar


                        • #13
                          coole Sache DANKE an alle die mir geholfen haben : )

                          Kommentar


                          • #14
                            Die empfohlene Methode bleibt dennoch mysql_set_charset. Zumindest für MySQL >= 5.0.7. *mühsam Gehör verschaff *

                            Kommentar


                            • #15
                              mermshaus: ich bin ja schon froh dass es jetzt funktioniert ))

                              "Using mysql_query() to execute SET NAMES .. is not recommended." ok ok ok - probiere es gleich mit "deinem" mysql_set_charset aus - ok hat auch funktioniert

                              Kommentar

                              Lädt...
                              X