xml encoding per script setzen?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 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

  • #2
    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 | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

    Kommentar


    • #3
      iconv

      Kommentar


      • #4
        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
        Zuletzt geändert von darki777; 26.08.2007, 13:44.

        Kommentar


        • #5
          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
          Zuletzt geändert von darki777; 26.08.2007, 23:46.

          Kommentar


          • #6
            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?

            Kommentar


            • #7
              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
              Zuletzt geändert von darki777; 27.08.2007, 08:16.

              Kommentar


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

                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".

                Kommentar


                • #9
                  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
                  Zuletzt geändert von darki777; 27.08.2007, 14:24.

                  Kommentar

                  Lädt...
                  X