Einzelnen Beitrag anzeigen
  #1  
Alt 17.05.2017, 17:56:44
basementmedia basementmedia ist offline
Anfänger
 
Registriert seit: Feb 2015
Alter: 39
Beiträge: 11
basementmedia befindet sich auf einem aufstrebenden Ast
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.
Mit Zitat antworten