Linuchs: unverständlicher Unterschied zwischen zwei Strings

Beitrag lesen

Moin,

ein eingegebenes Passwort wird verglichen mit einem Passwort, das aus einer Textdatei gelesen wird.

Selbst dann, wenn ich das Passwort aus der Datei per Zwischenablage ins Passwortfeld übertrage, ergibt sich keine Gleichheit.

Ich zeige das eingegebene Passwort und den Dateiinhalt an:

$arr_in = array (
 'code'   =>( $_POST['code'] ) ? trim( $_POST['code'] ) : trim( $_GET['code'] )     // Abo bearbeiten oder loeschen
);
...
$code = trim( file_get_contents( "db/newsl.txt" ));
echo "<pre>[".$code."]==[".$arr_in['code']."]? [".(($code==$arr_in['code'])?"TRUE":"FALSE")."]</pre>";

Ausgabe:

[äÖüßñç]==[äÖüßñç]? [FALSE]

Programm arbeit im UTF-8 Modus, Datei wurde mit BOM geschrieben.

Nach verzweifelter Suche komme ich auf die Idee, dass es sich um zwei gleich aussehende Zeichensätze handeln könnte:

  echo "<pre>";
  for ( $i=0; $i<strlen($code); $i++ ) {
    echo ord($code[$i])." ";
  }
  echo "<br>";
  for ( $i=0; $i<strlen($arr_in['code']); $i++ ) {
    echo ord($arr_in['code'][$i])." ";
  }
  echo "</pre>";

und tatsächlich:

239 187 191 195 164 195 150 195 188 195 159 195 177 195 167 
195 164 195 150 195 188 195 159 195 177 195 167 

wie ist das möglich? Darf die Textdatei nicht mit BOM geschrieben werden? Und warum unterdrückt echo die drei führenden BOM-Bytes?

fragt Linuchs