PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP für Fortgeschrittene und Experten (http://www.selfphp.de/forum/forumdisplay.php?f=13)
-   -   Seltsames Codierungsproblem (http://www.selfphp.de/forum/showthread.php?t=26005)

basementmedia 17.05.2017 17:56:44

Seltsames Codierungsproblem
 
Hi Zusammen,

ich habe ein Skript, das eine XML-Datei (die in UTF-8 codiert ist) ausliest und einen bestimmten Inhalt davon in einen Array (im Folgenden Array 1 genannt) schreibt. Im Code ist Array 1 "$meldungenliste_xml"

Code:

        $auswirkungen=simplexml_load_file($xml_datei);
        $result = $auswirkungen->xpath('/root/section-body/table/tr/td');
        foreach ($result as $td) {
                switch((string) $td[0]->block['style']) { // Verwende Attribute als Element-Indizes
                        case 'Alarm-Nummer':
                                $code=$td[0]->block;
                                // Code in Array aufnehmen
                                $meldung_open=true;
                                break;
                        case '':
                                break;
                        }
                // Auswirkungen ausgeben
                if ($meldung_open) {
                        switch((string) $td[0]->block['style']) { // Verwende Attribute als Element-Indizes
                        case 'Alarm-Meldung':
                                $meldung=$td[0]->block;
                                break;
                        case '':
                                break;
                        }       
                        switch((string) $td[0]->{'list'}['style']) { // Verwende Attribute als Element-Indizes
                        case 'Alarm-Auswirkungen':
                                foreach ($td[0]->{'list'}->listitem as $auswirkung) {
                                        $auswirkungen=$auswirkungen.$auswirkung[0].";";
                                        // Auswirkung in Xtra-Array schreiben
                                        if (!in_array((string)$auswirkung[0],$auswirkungen_xml)) {
                                                array_push($auswirkungen_xml, trim((string)$auswirkung[0]));
                                        }
                                }
                                $auswirkungen=substr($auswirkungen, 0, -1);
                                // Alle Auswirkungen wurden eingelesen, d.h. die Meldung kann geschlossen werden....
                                $meldung_open=false;
                                array_push($meldungenliste_xml, array('code' => (string)$code, 'meldung' => (string)$meldung, 'auswirkungen' => trim((string)$auswirkungen), 'kombi' => (string)$code." ".(string)$meldung));
                                $auswirkungen="";
                                break;
                        case '':
                                break;
                        }       
                }

Über Array 1 lasse ich anschließend serialize() und base64_encode drüber laufen und schicke ihn über ein hidden-Feld per POST (Formular) an einen andere Seite.

Dort wandle ich ihn per unserialize und base64_decode wieder einen Array zurück.
Funktioniert soweit wunderbar. Der Array 1 sieht wieder ganz genau so aus.

Nun durchlaufe ich Array 1 per foreach und übergebe einen bestimmten String davon an eine andere Funktion, in der dieser wiederum in einen Session-Array geschrieben wird (im folgenden Array 2 genannt).

Den Sinn des ganzen zu erklären würde an dieser Stelle den Rahmen sprengen.

Nun kommt jedenfalls das seltsame:
Eine weitere Funktion vergleicht die Strings aus Array 1 und 2 wieder miteinander und prüft ob diese identisch sind (was ja so sein sollte, da Array 2 ja aus Array 1 aufgebaut wird). Bei allen Strings ohne Umlaute werden diese als identisch erkannt.
Sobald aber ein Umlaut in einem String drin ist, werden die beiden eigentlich gleichen Strings nicht mehr als gleich erkannt, obwohl sie im Browser noch genau gleich aussehen!

Meine Funktion prüft quasi z.B. den String 'Überdruck Ventil 1' aus Array 1 mit dem String 'Überdruck Ventil 1' aus Array 2 und gibt dann aus:
'Überdruck Ventil 1' ist nicht gleich 'Überdruck Ventil 1'

Es scheint so als ob die Texte unterschiedlich codiert sind und nur scheinbar gleich aussehen.

Hat jemand eine Idee, wie ich dem Fehler auf die Schliche kommen könnte?

Sorry, klingt total verwirrend - zugegebenermaßen.
Macht in meinem Skript aber Sinn.

sysop 18.05.2017 12:50:21

AW: Seltsames Codierungsproblem
 
Auf die schnelle würde mir etwas wie htmlspecialchars oder real_escape_string einfallen.

htmlspecialchars() wäre eine Variante, wo du vor dem Vergleich beide Strings durchschicken könntest. also eine Prüfung ala

PHP-Code:

if(htmlspecialchars($String1) == htmlspecialchars($String2)) 

Liesse sich so garnichts finden, würde ich die Strings in ihre einzelnen Zeichen zerlegen und die ASCII-Codes vergleichen


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:18:01 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.