php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > XML
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


XML Hier passt alles rein, was das Thema XML (XSLT, JSON etc...) betrifft, auch in Verbindung mit PHP

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 26-08-2007, 06:09
darki777
 Member
Links : Onlinestatus : darki777 ist offline
Registriert seit: Aug 2006
Beiträge: 150
darki777 ist zur Zeit noch ein unbeschriebenes Blatt
Standard xml encoding per script setzen?

Hi,
ist es irgendwie möglich den encoding Wert eines bestehenden XML
Dokuments per php script abzuändern? Bzw. auch beim Initialisieren
eines solchen? Sowas wie setEncoding("utf-8"); wäre ganz
praktisch, hoffe jemand weis vieleicht wie das geht.

Noch ne gute Nacht (od. guten Morgen Gruß darki
Mit Zitat antworten
  #2 (permalink)  
Alt 26-08-2007, 11:13
tontechniker
 PHP Senior
Links : Onlinestatus : tontechniker ist offline
Registriert seit: Jul 2005
Beiträge: 1.972
tontechniker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Um die Kodierung musst du dich imho selber kümmern, dass heißt XML auslesen -> umkodieren (utf_encode) -> neu schreiben.
__________________
Die Regeln | rtfm | register_globals | strings | SQL-Injections | []
Mit Zitat antworten
  #3 (permalink)  
Alt 26-08-2007, 11:26
penizillin
 PHP Guru
Links : Onlinestatus : penizillin ist offline
Registriert seit: Feb 2004
Beiträge: 10.166
penizillin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

iconv
Mit Zitat antworten
  #4 (permalink)  
Alt 26-08-2007, 14:13
darki777
 Member
Links : Onlinestatus : darki777 ist offline
Registriert seit: Aug 2006
Beiträge: 150
darki777 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

utf_encode kenn ich bringt mir hier aber absolut nix,
ich brauch ne reine XML Ausgabe die die Zeile:
<?xml version='1.0'?>

in die Zeile:
<?xml version='1.0' standalone='yes' encoding='utf-8'?>

abwandelt (bzw. das XML Objekt abändert), die XML wird
dann von Flash weiter ausgelesen, der guckt dann auf
was der parameter "encoding" gesetzt ist und arbeitet
das dann je nach format ab. Hoffe ihr wisst jez was ich
meine, daher war meine Frage ob es eine Funktion für
sowas gibt, ich könnt natürlich die erste Zeile per PHP
einfach so auslesen und den String direkt abändern und
dann wieder einsetzen, aber genau dass wollt ich
verhindern, wäre ja nicht gerade die professionellste Lösung.
Ich will ja je nach Gebrauch die Parameter erweitern,
daher wäre eine einfache set-Methode für sowas ganz
praktisch.

Gruß darki

Geändert von darki777 (26-08-2007 um 14:44 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 26-08-2007, 17:51
darki777
 Member
Links : Onlinestatus : darki777 ist offline
Registriert seit: Aug 2006
Beiträge: 150
darki777 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Habe mir jez nen Art "parser" gebaut wo man den Header
der XML verändern kann, hab die Klasse noch nicht auf alles
getestet, also wenn irgendwo Fehler auftretten sagt bescheid,
vieleicht hilft es ja dem ein oder anderen, hier der Code:

PHP-Code:
<?php
    
class xml_header_parser
    
{
        private 
$xml;
        private 
$xml_header;
        private 
$xml_body;
        private 
$version;
        private 
$encoding;
        private 
$standalone;
        
        function 
__construct($xml,$version="1.0",$encoding="utf-8",$standalone=null)
        {
            
$this->set_xml($xml);
            
$this->set_version($version);
            
$this->set_encoding($encoding);
            
$this->set_standalone($standalone);
        }
        
        function 
set_xml($xml)
        {                   
            
$a strpos($xml,"<?");
            
$b strpos($xml,"?>"); 
            
$this->xml_header substr($xml,$a,$b+2);
            
$this->xml_body substr($xml,$b+2);
            
$this->xml $xml;
        }
        
        function 
set_version($version)
        {
            if(empty(
$version))
            
$this->version $this->string_between($this->xml_header,"version=");
            else
            
$this->version $version;
        }
        
        function 
set_encoding($encoding)
        {
            if(empty(
$encoding))
            
$this->encoding $this->string_between($this->xml_header,"encoding=");
            else
            
$this->encoding $encoding
        }
        
        function 
set_standalone($standalone)
        {
            if(empty(
$standalone))
            
$this->standalone $this->string_between($this->xml_header,"standalone=");
            else
            
$this->standalone $standalone;    
        }
        
        function 
get_xml()
        {
            return 
$this->xml;   
        }
        
        function 
get_xml_header()
        {
            
$tmp_version = (!empty($this->version)) ? " version='{$this->version}'" null;
            
$tmp_standalone = (!empty($this->standalone)) ? " standalone='{$this->standalone}'" null;
            
$tmp_encoding = (!empty($this->encoding)) ? " encoding='{$this->encoding}'" null;
            
            return 
"<?xml{$tmp_version}{$tmp_standalone}{$tmp_encoding}?>";   
        }
        
        function 
get_xml_body()
        {           
            return 
$this->xml_body;
        }
        
        function 
get_version()
        {
            return 
$this->version;
        }
        
        function 
get_encoding()
        {
            return 
$this->encoding;
        }
        
        function 
get_standalone()
        {
            return 
$this->standalone;   
        }
        
        function 
generate_XML()
        { 
            return 
$this->get_xml_header() . $this->get_xml_body();            
        }
        
        private function 
string_between($xml,$str,$splitter="'")
        {
            
$tmp split(" ",$xml);
            foreach(
$tmp as $counter => &$value)
            {   
                if(
stristr($value,$str))
                {
                    
$a stripos($value,$splitter);
                    
$b stripos($value,$splitter,$a+1);
                    
$l $b-$a;
                    
$str substr($value,$a+1,$l-1);            
                    
                    return 
$str;
                }
            }
        }
    }
    
    
// Testbeispiel:
    
$myXML "<?xml version='1.0' standalone='yes' encoding='utf-8'?><root>bla</root>";
    
$xml = new xml_header_parser($myXML);
    
$xml->set_encoding("iso");
    
print_r($xml->generate_XML());
?>
[EDIT (2007-08-26):] Hab die Version nochmal überarbeitet.

Viele Grüße, darki

Geändert von darki777 (27-08-2007 um 00:46 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 27-08-2007, 02:10
penizillin
 PHP Guru
Links : Onlinestatus : penizillin ist offline
Registriert seit: Feb 2004
Beiträge: 10.166
penizillin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

also ist das problem ein ganz anderes, als im eingans-posting beschrieben? ok. blöd gelaufen. wenn man mit dom arbeitet, gibt es für DOMDocument entsprechende attribute, die man nach belieben einstellen kann (stehen alle im manual). dass diese angabe allerdings eng mit der tatsächlichen kodierung der datei korreliert, ist dir anscheinend unbewusst?
Mit Zitat antworten
  #7 (permalink)  
Alt 27-08-2007, 08:59
darki777
 Member
Links : Onlinestatus : darki777 ist offline
Registriert seit: Aug 2006
Beiträge: 150
darki777 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ja, war wohl falsch von mir formuliert. Was meinst du mit "korreliert"?
Was sollte da korrelieren, also bei mir kommt z.B. valides XML wie das
hier raus:
PHP-Code:
<?xml version='1.0' encoding='utf-8'?>
<root><file_0><file_path><![CDATA[dir0/Anschrift.txt]]></file_path><file><![CDATA[Anschrift.txt]]></file><dir><![CDATA[dir0/]]></dir><dir_depth><![CDATA[1]]></dir_depth></file_0></root>
Hmm, hätt mir wohl mit DOM einiges ersparren können,
bzw. mein SimpleXML Objekt in DOM konvertieren,
Header ändern und wieder zurückwandeln, danke für
den Tip. Allerdings würd ich das mit der Kolleration
trotzdem aus Interesse gerne wissen

[EDIT:] [name: doctype] [type: DOMDocumentType] [readonly: yes],
hab zwar nachgeschlagen, aber irgendwie scheinen die Eigenschaften
nicht abänderbar/beschreibbar zu sein oder versteh ich da was falsch?

Gruß darki

Geändert von darki777 (27-08-2007 um 09:16 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 27-08-2007, 13:48
penizillin
 PHP Guru
Links : Onlinestatus : penizillin ist offline
Registriert seit: Feb 2004
Beiträge: 10.166
penizillin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
hab zwar nachgeschlagen, aber irgendwie scheinen die Eigenschaften nicht abänderbar/beschreibbar zu sein oder versteh ich da was falsch?
einfach weiterlesen.

Zitat:
Was meinst du mit "korreliert"?
die angabe ist nicht einfach ein string, der ganz nett ausschaut, sondern muss genau die kodierung beschreiben, in der die datei kodiert ist. also reicht i.a. nicht "einfach das attribut ändern".
Mit Zitat antworten
  #9 (permalink)  
Alt 27-08-2007, 15:14
darki777
 Member
Links : Onlinestatus : darki777 ist offline
Registriert seit: Aug 2006
Beiträge: 150
darki777 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Werd mir das mal in Ruhe durchlesen, aber das mit dem String
funzt dennoch ohne Probleme, ich kann die XML einfach
weiterverarbeiten und wieder in ein simpleXML Objekt konvertieren,
also scheint nicht wirklich probs zu geben. Außer in meinem speziellen
Beispiel bei den CDATA Tags, wo ich aber schon davor probs hatte, da
simpleXML bekanntlich CDATA ned so gern mag.

Allerdings brauch ich das Zeug sowieso fürn Flashparser, und der
ließt mir das dann alles ordentlich aus. Also der Header lässt sich
mit der Klasse ohne Probleme ändern und funzt in php sowie in
actionscript, solang ich keine fehler seh benutz ich meine Klasse,
dann brauch ich nicht ständig von simpleXML nach DOM und wieder
nach simpleXML konvertieren. Danke nochmal für die Bemühungen,
DOM probier ich dann mal bei nem anderen Projekt aus.

Gruß darki

Geändert von darki777 (27-08-2007 um 15:24 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni


 

Aktuelle PHP Scripte

HeidiSQL - kostenloses MySQL front-end Editor für Windows ansehen HeidiSQL - kostenloses MySQL front-end Editor für Windows

HeidiSQL - ist ein Windows-Editor für die bekannt open Source Datenbank mySQL

10.12.2018 Berni | Kategorie: MYSQL/ Management
piwik Open-Source Webanalyse-Software ansehen piwik Open-Source Webanalyse-Software

piwik ist eine gute Alternative zu Google Analytics. Viele Features und ein modernes Erscheinungsbild mit aussagefähigen Statistiken in Echtzeit

10.12.2018 phpler | Kategorie: PHP/ Besucherzaehler
jQuery Mobile ansehen jQuery Mobile

Touch-Optimized Web Framework für Smartphones & Tablets

09.12.2018 phpler | Kategorie: AJAX/ Framework
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 14:55 Uhr.