Marcel: strcmp() Problem

Hallo,

entweder sehe ich vor lauter Bäumen den Wald nicht mehr oder keine Ahnung:

Ein Array wird aus einer MySQL Datenbank geladen. Ein Feld aus diesem Array soll nun mit einer User Eingabe verglichen werden.

Zum Beispiel:
$string = array_aus_db[$i];
$finde  = string vom User;
if (strcmp($string, $finde)==0)
{?> FUNKTIONIERT NICHT <?php}

Obwohl exakt der gleiche String eingeben wird, bekomme ich keinen Treffer angezeigt.
Wenn ich mir die Strings aus der Datenbank und der User Eingabe ausgeben lasse und füge sie manuell der Variable bei, dann funktioniert es.

Zum Beispiel:
$string ="9-A/1-GFD - 12/90-04/91"; /* Um solche Strings handelt es sich */
$finde  ="9-A/1-GFD - 12/90-04/91";
if (strcmp($string, $finde)==0)
{?> FUNKTIONIERT <?php}

Meine bisherigen Versuche z.B. mit trim(), stripslashes(), strnatcasecmp() sind alle fehlgeschlagen.

Hat jemand eine Idee?

Danke + Gruß

Marcel

  1. Hallo,

    was sagt

      
    <?php  
    var_dump($string);  
    var_dump($finde);  
    ?>  
    
    

    wenn du den Code hinter dem if-Konstrukt einfügst?

    Gruß
    Christoph

    1. Hallo Christoph,

      danke für Deinen Beitrag.

      var_dump($string);
      var_dump($finde);

      Ich habe var_dump eingegeben und mir beide Variablen ausgeben lassen. Hier das Ergebnis:

      string(31) "3-1/3-R - 12/82-12/90"
      string(23) "3-1/3-R - 12/82-12/90"

      Das gleiche Ergebnis wird übrigens auch mit strlen angezeigt:
      strlen($string) : 31
      strlen($finde)  : 23

      Sorry, das hatte ich oben vergessen zu erwähnen.

      Wo kann denn die unterschiedliche Länge herkommen?

      Ich wünsche euch einen schönen Sonntag.

      Gruß Marcel

      1. Guten Morgen,

        var_dump($string);
        var_dump($finde);

        string(31) "3-1/3-R - 12/82-12/90"
        string(23) "3-1/3-R - 12/82-12/90"

        strlen($string) : 31
        strlen($finde)  : 23

        Sorry, das hatte ich oben vergessen zu erwähnen.

        ach, diesen Unterschied hattest du schon festgestellt? Das wäre allerdings eine ganz entscheidende Aussage gewesen.

        Wo kann denn die unterschiedliche Länge herkommen?

        Keine Ahnung - aber jetzt wäre es interessant, die beiden Strings wirklich Byte für Byte (nicht nur Zeichen für Zeichen) zu analysieren:

        for ($i=0; $i<strlen($string); $i++)
              echo sprintf("%02X ", $string{$i});
           echo "\n";

        Dasselbe für $finde. Dann sieht man zumindest schonmal, was die beiden Strings *wirklich* enthalten. Ich tippe auf überzählige Whitespaces in $string, obwohl man die ja eigentlich auch schon in der Quellcodeansicht sehen müsste.

        So long,
         Martin

        --
        Zwischen Leber und Milz
        passt immer noch'n Pils.
      2. Hallo Christoph,

        danke für Deinen Beitrag.

        var_dump($string);
        var_dump($finde);

        Ich habe var_dump eingegeben und mir beide Variablen ausgeben lassen. Hier das Ergebnis:

        string(31) "3-1/3-R - 12/82-12/90"
        string(23) "3-1/3-R - 12/82-12/90"

        Das gleiche Ergebnis wird übrigens auch mit strlen angezeigt:
        strlen($string) : 31
        strlen($finde)  : 23

        Sorry, das hatte ich oben vergessen zu erwähnen.

        Wo kann denn die unterschiedliche Länge herkommen?

        Versuche mal folgendes:

          
        <?php  
            echo '$string: ', mb_detect_encoding($string), "\n";  
            echo '$finde: ', mb_detect_encoding($finde), "\n";  
        ?>