hawkmaster: Umlaute kodieren? Flasche Kodierung?

Hallo zusammen,
auf einer Loginseite kann ein Anwender seinen Namen und Passwort eingeben.
Diese werden dann für ein Login zu einem ActiveDirectory genommen.

Alles klappt soweit, bis auf ein paar User die leider ihren Loginnamen mit Umlauten genommen haben. Etwa "Elsässer".

Ich hatte eigentlich den LDAP Bind schon mit "utf8_encode" gemacht.

$bd = @ldap_bind($ad, utf8_encode($_POST['USER']).$at_dn , utf8_encode($_POST['PWD'])) ;

Trotzdem geht es nicht.
Aus dem "elsässer" wird "elsässer"

habe ich eine flasche Kodierung?
Bin für jeden Tipp dankbar.

vielen Dank und viele Grüße
hawk

  1. Seid gegrüßt!

    Aus dem "elsässer" wird "elsässer"

    Wenn ich mich nicht irre ist die die ISO-Codierte UFT8-Ausgabe des Strings. richtig?

    --
    Bis Später
    RuD
    ________________________________________________________________
    SelfCode: ie:% fl:( br:^ va:) ls:< fo:| rl:( n4:& ss:) de:> js:| ch:| mo:| zu:)
    1. Prüfe mal alle Kodierungen der beteiligten Dateien. Sollte alle UTF-8 sein inkl. richtiger Angabe des Zeichensatzes in HTML.

      1. Hallo zusammen,

        Prüfe mal alle Kodierungen der beteiligten Dateien. Sollte alle UTF-8 sein inkl. richtiger Angabe des Zeichensatzes in HTML.

        vielen Dank für eure Hilfe,
        Meint Ihr die Charset Einstellung ändern?
        Ich habe es mal mit "utf-8" versucht.
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

        vorher war "iso-8859-1" drin.
        Das hat aber nichts geändert.
        Ein
        echo "der user ist " . utf8_encode($_POST['USER']) ."<br>";
        bringt immer,
        der user ist elsässer

        vielen Dank und viele Grüße
        hawk

        1. echo $begrüßung;

          Ein
          echo "der user ist " . utf8_encode($_POST['USER']) ."<br>";
          bringt immer,
          der user ist elsässer

          Vor dem Probieren von Lösungsversuchen ist eine genaue Analyse des Problems sinnvoll. Lass dir zuerst ausgeben, was in $_POST['USER'] wirklich drinsteht:

          echo chunk_split(bin2hex($_POST['USER']), 2, ' ');

          Vergleiche die Bytes mit einer ISO-8859-1-Tabelle und den Regeln für UTF-8. Ermittle, welche Kodierung das AD haben will. Versuche nun, die Unterschiede zu beseitigen. Am besten so, dass alle die gleiche Kodierung sprechen, ohne dass irgendwas umgewandelt werden muss, denn das ist nicht in jedem Fall verlustfrei möglich.

          echo "$verabschiedung $name";

          1. Hallo dedlfix,
            vielen Dank auch dir.
            Mit deinen Hinweisen kann ich jedoch nicht so viel anfangen.

            Vor dem Probieren von Lösungsversuchen ist eine genaue Analyse des Problems sinnvoll. Lass dir zuerst ausgeben, was in $_POST['USER'] wirklich drinsteht:

            echo chunk_split(bin2hex($_POST['USER']), 2, ' ');

            Vergleiche die Bytes mit einer ISO-8859-1-Tabelle und den Regeln für UTF-8. Ermittle, welche Kodierung das AD haben will. Versuche nun, die Unterschiede zu beseitigen. Am besten so, dass alle die gleiche Kodierung sprechen, ohne dass irgendwas umgewandelt werden muss, denn das ist nicht in jedem Fall verlustfrei möglich.

            Ein echo mit;
            echo chunk_split(bin2hex($_POST['USER']), 2, ' ');
            bringt;
            65 6c 73 e4 73 73 65 72

            Was meinst du nun mit "mit einer ISO-8859-1-Tabelle und den Regeln für UTF-8" vergleichen?
            Sind die einzelnen Zahlenpaare die identischen dezimalwerte einer Asciitabelle?
            Also das AD will auf jedenfall eine "utf8 Codierung".

            vielen Dank und viele Grüße
            hawk

            1. echo $begrüßung;

              Ein echo mit;
              echo chunk_split(bin2hex($_POST['USER']), 2, ' ');
              bringt;
              65 6c 73 e4 73 73 65 72

              Was meinst du nun mit "mit einer ISO-8859-1-Tabelle und den Regeln für UTF-8" vergleichen?

              Du solltst dir eine ISO-8859-1-Code-Tabelle nehmen und die Bytewerte vergleichen. Das e4 passt auf ein ä.

              Sind die einzelnen Zahlenpaare die identischen dezimalwerte einer Asciitabelle?

              Hexadezimalwerte, wegen bin2hex(). Das chuck_split() macht nur Leerzeichen zwischen die Bytes, damit man die Ausgabe besser lesen kann.

              Also das AD will auf jedenfall eine "utf8 Codierung".

              Du hast also ISO-8859-1 vorliegen. Das kannst du mit utf8_encode() nach UTF-8 umkodieren. Wenn du dir das allerdings in einer ISO-8859-1-Umgebung ausgeben lässt, dann siehst du ein ä statt ä. Bist du sicher, dass das auch beim AD falsch ankommt? Dann, vermute ich, hat es noch eine zweite ISO-8859-1-nach-UTF-8-Umkodierung in deinem Prozess, oder das AD will doch kein UTF-8.

              echo "$verabschiedung $name";

  2. Yerf!

    Ich hatte eigentlich den LDAP Bind schon mit "utf8_encode" gemacht.

    $bd = @ldap_bind($ad, utf8_encode($_POST['USER']).$at_dn , utf8_encode($_POST['PWD'])) ;

    Trotzdem geht es nicht.
    Aus dem "elsässer" wird "elsässer"

    ...oder gerade deswegen? Für mich sieht das aus, als würde ein UTF8-String als ISO behandelt nochmals nach UTF8 gewandelt werden. Lass mal den encode weg, vermutlich hast du schon einen UTF8-String.

    Gruß,

    Harlequin

    --
    <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
  3. Hi!

    habe ich eine flasche Kodierung?

    Keine Ahnung, aber ne Flasche Wasser waer vielleicht besser?

    ;)

    --
    Trau Dich!