Stringvergleich


tklustig

Erfahrenes Mitglied
#1
Für Menschen ist der Inhalt gleich, allerdings nicht für digitale Maschinen:
Ein var_dump() spuckt folgendes Ergebnis aus:
Code:
Übereinstimmung nicht positiv
array(1) { [0]=> string(11) "AW:Prüfung" } array(1) { [0]=> string(12) "AW:Prüfung" }
Eigentlich sind die Elemente identisch! Dummerweise, warum entzieht sich meiner Kenntnis, ist der eine string elf, der andere zwölf Zeichen lang, deshalb wird wohl auch die Kondition false. Meine Frage: Welches zusätzliche, für mich nicht sichtbare Zeichen könnte hier geparst werden?
Hier zunächst der Code:
PHP:
$mailID = $ShowMailbox->searchMailbox('ALL');
        $Infos = $ShowMailbox->getMailsInfo($mailID);
        foreach ($Infos as $info) {
            if ($id == $info->subject) {
                print_r("<br>Übereinstimmung positiv<br>");
                var_dump((array)$info->subject);
                var_dump((array($id)));
            } else {
                print_r("<br>Übereinstimmung nicht positiv<br>");
                var_dump((array) $info->subject);
                var_dump((array($id)));
            }
        }
Dieses Phänomen tritt ausschließlich bei Umlauten auf. Ein ä,ö oder ü im String führt dazu, dass die Kondition false wird. Vermutlich liegt das ma' wieder an dem Encoding der Klasse. Welches unsichtbare Zeichen könnte folgende Methode einfügen:
PHP:
  protected function convertStringEncoding($string, $fromEncoding, $toEncoding) {
        if (!$string || $fromEncoding == $toEncoding) {
            return $string;
        }
        $convertedString = function_exists('iconv') ? @iconv($fromEncoding, $toEncoding . '//IGNORE', $string) : null;
        if (!$convertedString && extension_loaded('mbstring')) {
            $convertedString = @mb_convert_encoding($string, $toEncoding, $fromEncoding);
        }
        if (!$convertedString) {
            throw new Exception('Mime string encoding conversion failed');
        }
        return $convertedString;
    }
 
Zuletzt bearbeitet:

tklustig

Erfahrenes Mitglied
#3
Yuup. Deine Vermutung war richtig. Habe das Problem durch die Verwendung zweier unterschiedlicher Ersetzungsmethoden in den Griff bekommen. Merci beaucoup für Dein feedback!