php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 12.03.2010, 21:31  
Neuer Benutzer
 
Registriert seit: 12.03.2010
Beiträge: 4
PHP-Kenntnisse:
Fortgeschritten
RiggerofRiV befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Zeilenumbrüche werden nur teils erkannt.

Hallo zusammen,

Ich habe ein fast schon paradoxes Problem: ich habe einen fremdgenerierten (anderes Programm) String, der zeilenweise in einer XML gespeichert wird. Diesen String will ich dann auslesen und weiterverarbeiten. Dabei ist mir aufgefallen, das Zeilenumbrüche reproduzierbar erst ab einer bestimmten Stelle erkannt werden.

Rahmenbedingungen:

Ich will eine Mediabibliothek für meinen WHS (Windows Home Server) umsetzen. Auf dem WHS läuft die aktuelle Wamp Version. Die Metadaten zum anzeigen wurden mit meta<browser/> erstellt und jeweils in einer mymovies.xml im Verzeichnis=Film gespeichert. Danach habe ich mit Fi!o die Mediendaten (Mediainfo.dll) ausgelesen und ebenfalls jeweils in der dazugehörigen mymovies.xml gespeichert.

Es wäre zuviel den ganzen Code zu posten deswegen mach ich das ganze auszugweise.

Die XML
Code:
<AudioCodec>AC-3 </AudioCodec>
    <AudioLanguage>German</AudioLanguage>
    <MediaInfo>General
Complete name                    : Z:\HD-Filme\***.MKV
Format                           : Matroska
File size                        : 7.82 GiB
Duration                         : 2h 31mn
Overall bit rate                 : 7 369 Kbps

Video
ID                               : 1
Format                           : AVC
Format/Info                      : Advanced Video Codec
Format profile                   : High@L4.1
Format settings, CABAC           : Yes
Format settings, ReFrames        : 10 frames
Muxing mode                      : Container profile=Unknown@4.1
Codec ID                         : V_MPEG4/ISO/AVC

...usw
</MediaInfo>
versuche ich nun den tag <Mediainfo> auszulesen wird alles bis Video in fortlaufenden String ausgegeben. Da ist dann der erste Zeilenumbruch, den PHP erkennt (somit werden ab ID alle Zeilen korrekt erkannt). Dabei ist es irrelevant ob ich nl2br() oder str_replace("\n", "<br>", ... ) nutze. explode("\n", ... ), welches ich eigentlich brauche um weiter zu machen funktioniert logischer Weise auch nicht. Kombination aus \n und \r geben mir nur einen einzigen String zurück, also das funktioniert schonmal gar nicht. Ebenfalls ist es egal welche mymovies.xml ich versuche.

Ein HexEditor zeigt mir an, das in der XML hinter jeder Zeile im <MediaInfo> ein 0D 0A steht also sind die Zeilenumbrüche vorhanden.

Ich weis nicht mehr weiter. Ich sitz jetz schon seit 2 Tagen an dem Problem und habe keine Lösung gefunden. Vielleicht fällt jemanden noch etwas ein.

BTW. Das XML wird per xmlParser in ein handbareres Array umgewandelt. Dort sind aber keinerlei trim's oder replaces verwendet:

PHP-Code:
    private function generateMovieArray($xmlArr) {
        if (
is_array($xmlArr)) {
            
// Array auf Startpunkt festsetzt
            
$xmlArr $xmlArr[0]["child"];
            
// Das Array durchlaufen
            
while ($val current($xmlArr)) {
                
// Schon mal das nächste Element holen um zu erkennen ob eine Liste beginnt (gleiche Indizes [name])
                
$tmp next($xmlArr);
                
// Prüfe ob eine Liste vorhanden
                
if (($tmp["name"] == $val["name"]) || !$tmp["name"]) {
                    
// Liste vorhanden 
                    // Prüfen ob das Element Kindknoten hat 
                    
if (array_key_exists("child"$val)) {
                        
// Ja -> rekursiv mit Kindnoten fortfahren
                        
$return[][$val["name"]] = $this->generateMovieArray(array($val));
                    } else {
                        
// Nein -> Element einfach in die Liste eintragen
                        
$return[][$val["name"]] = $val["content"];
                    }
                } else {
                    
// Keine Liste vorhanden
                    // Prüfen ob das Element Kindknoten hat 
                    
if (array_key_exists("child"$val)) {
                        
// Ja -> rekursiv mit Kindnoten fortfahren
                        
$return[$val["name"]] = $this->generateMovieArray(array($val));
                    } else {
                        
// Nein -> Element einfach in das Array eintragen
                        
$return[$val["name"]] = $val["content"];
                    }
                }
            }
            return 
$return;
        } else {
            return 
false;
        }
    } 
Besten Dank
Rigger

Geändert von RiggerofRiV (13.03.2010 um 01:41 Uhr).
RiggerofRiV ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 12.03.2010, 22:58  
Neuer Benutzer
 
Registriert seit: 12.03.2010
Beiträge: 4
PHP-Kenntnisse:
Fortgeschritten
RiggerofRiV befindet sich auf einem aufstrebenden Ast
Standard

So nachdem nun noch einmal umher recherchiert habe, komme ich zu folgender Problemumgehung (Lösung will ich es nicht nennen).

Ich habe mir nochmal die zugrundeliegende XMLParser-Klasse zu Gemüte geführt.

Dabei ist mir aufgfallen, das die Daten in der callback-Funktion von xml_set_character_data_handler doch getrimmt werden. Entferne ich diese, werden die Werte korrekt übernommen (zumindest sind mir bisher noch keine Nebenwirkungen aufgefallen).

Daraus erschließt sich mir dennoch nicht, warum es zu so einem unvorhersehbaren Verhalten kommt. Scheinbar wird an der einen Stelle getrimmt wie im Code "befohlen" an anderer Stelle aber nicht.

BTW: Ich habe die XML-Klasse nicht selbst geschrieben, da ich das Rad nicht wieder neu erfinden wollte, also steinigt mich bitte nicht, dass ich den Fehler so lange übersehen habe

Grüße Rigger

EDIT: Ich markier das jetzt mal als gelöst, auch wenn ich immernoch nicht hinter dieses seltsame Verhalten gekommen bin. Es funktioniert jetzt zumindest wie gewollt.

Vielen Dank für die Leser des Threads.

Geändert von RiggerofRiV (16.03.2010 um 11:59 Uhr).
RiggerofRiV ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
zeilenumbrüche im newsscript Komatruppe PHP Tipps 2009 3 24.08.2009 12:16
[Erledigt] nl2br() verursacht ganz viele Zeilenumbrüche Jeffry PHP Tipps 2008 6 25.06.2008 15:06
zeilenumbrüche bei aus datei gelesenem text erhalten Crypi PHP Tipps 2008 6 03.06.2008 16:57
Regex löscht alle Zeilenumbrüche. Anduril PHP Tipps 2006 3 16.10.2006 22:36
preg_match für ALLE unsichtbaren Zeilenumbrüche / Zeichen ff-webdesigner PHP Tipps 2006 1 11.09.2006 18:32
Zeilenumbrüche werden nicht beachtet jacos PHP Tipps 2006 8 27.04.2006 16:05
nochmal Zeilenumbrüche Calli PHP Tipps 2005-2 3 28.09.2005 09:36
Zeilenumbrüche m-elssner PHP Tipps 2005-2 9 21.09.2005 16:59
Zeilenumbrüche vollständig eliminieren PHP Tipps 2005-2 9 23.08.2005 05:33
Zeilenumbrüche in der Funktion mail() Igäl PHP Tipps 2005 7 19.04.2005 12:35
Zeilenumbrüche in BBCodes ersetzen... PHP Tipps 2005 1 06.04.2005 12:06
csv Datei: Zeilenumbrüche berücksichtigen PHP Tipps 2005 5 17.02.2005 11:54
Zeilenumbrüche einfügen PHP Tipps 2004-2 6 10.11.2004 17:10
Zeilenumbrüche innerhalb eine string-Variable??? PHP Tipps 2004 6 20.08.2004 17:25
textarea zeilenumbrüche umwandlen?? PHP Tipps 2004 1 21.06.2004 11:15

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
http://www.php.de/php-fortgeschrittene/65655-erledigt-zeilenumbrueche-werden-nur-teils-erkannt.html, php mediainfo, mediainfo php, php erkennt zeilenumbruch nicht, \\n wird nicht als zeilenumbruch erkannt, mediainfo to xml, php zeilenumbruch format erkennen, php zeilenumbruch in text wird nicht erkannt, php addformat zeilenumbruch, podatei zeilenumbruch wird nicht erkannt, zeilenumbruch bei strings php werden nicht übernommen, explode php zeilenumbruch nicht erkannt, php erkennt keine zeilenumbrüche, unsichtbare zeilenumbrüche entfernen php, php mediainfo daten auslesen, php zeilenumbruch \\n wird nicht erkannt, erkennt zeilenumbrüche ncht, php zeigt zeilenumbruch nur als code an, php /n wird nicht angenommen, php unsichtbare zeilenwechsel entfernen

Alle Zeitangaben in WEZ +1. Es ist jetzt 20:21 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum