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!
    [COLOR="#F5F5FF"]--[/COLOR]
    [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
    [COLOR="#F5F5FF"]
    --[/COLOR]

    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
                "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

                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.
                        [COLOR="#F5F5FF"]--[/COLOR]
                        [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                        [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                        [COLOR="#F5F5FF"]
                        --[/COLOR]

                        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