Ankündigung

Einklappen
Keine Ankündigung bisher.

speichern in xml-Datei: Sonderzeichen behalten

Einklappen

Neue Werbung 2019

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

  • speichern in xml-Datei: Sonderzeichen behalten

    Hallo Leute,

    habe das Problem, dass ich eine XML mit Sonderzeichen (z.B. "&lt;") speichern will, aber diese Sonderzeichen stets konvertiert werden (z.B. "<"). Dies betrifft die Variable $MetaData.

    Mein Script:

    PHP-Code:
    <?

    /*//////////////////////////////////////////////////////////////////////////////
    Array der vordefinierten Radiosender aus UPNP_Radio_Presets.ips.php lesen und
    in die Datei IP-Symcon/webfront/user/Multimedia/Browse/Playlist/Radio.xml
    schreiben
    //////////////////////////////////////////////////////////////////////////////*/

    include ("UPNP_Constants.ips.php");
    include ("UPNP_Radio_Presets.ips.php");

    $Track = "";

    for($i=0,$size=count($Radio);$i<$size;$i++)
    {
    $Title = ($Radio["$i"]['title']);
    $AlbumArtURI = ($Radio["$i"]['albumArtURI']);
    $Resource = ($Radio["$i"]['resource']);

    $MetaData = '&lt;DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/"&gt;&lt;item id="Radio'.$i.'"&gt;&lt;dc:title&gt;'.$Title.'&lt;/dc:title&gt;&lt;upnp:albumArtURI&gt;'.$AlbumArtURI.'&lt;/upnp:albumArtURI&gt;&lt;res protocolInfo="http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=03700000000000000000000000000000"&gt;'.$Resource.'&lt;/res&gt;&lt;upnp:class&gt;object.item.audioItem.audioBroadcast&lt;/upnp:class&gt;&lt;/item&gt;&lt;/DIDL-Lite&gt;';
    //$MetaData = '';

    $Track .= '
     <Track'.$i.'>
      <typ>item</typ>
      <metadata>'.$MetaData.'</metadata>
      <id>Radio'.$i.'</id>
      <refid>leer</refid>
      <parentid>leer</parentid>
      <restricted>leer</restricted>
      <artist>leer</artist>
      <album>leer</album>
      <title>'.$Title.'</title>
      <albumArtURI>'.$AlbumArtURI.'</albumArtURI>
      <genre>leer</genre>
      <date>leer</date>
      <originalTrackNumber>leer</originalTrackNumber>
      <class>object.item.audioItem.audioBroadcast</class>
      <resource>'.$Resource.'</resource>
      <duration>leer</duration>
      <size>leer</size>
      <bitrate>leer</bitrate>
     </Track'.$i.'>';
     
    }

    $xml = '<?xml version="1.0" encoding="UTF-8"?>
    <Playlist>'.$Track.'
    </Playlist>';

    echo($xml);

    //Radio-Presets in /webfront/user/Multimedia/Browse/Playlist/Radio.xml schreiben

    $handle = fopen($Kernel."webfront/user/Multimedia/Browse/Playlist/Radio.xml", "w+");
    fwrite($handle, $xml);
    fclose($handle);
            
    ?>
    Wie kann ich das verhindern ?

    Ein echo der $XML sieht so aus, wie sie soll:

    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <Playlist>
     <Track0>
      <typ>item</typ>
      <metadata>&lt;DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/"&gt;&lt;item id="Radio0"&gt;&lt;dc:title&gt;1LIVE diggi&lt;/dc:title&gt;&lt;upnp:albumArtURI&gt;http://d1i6vahw24eb07.cloudfront.net/s45087q.png&lt;/upnp:albumArtURI&gt;&lt;res protocolInfo="http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=03700000000000000000000000000000"&gt;http://www.wdr.de/wdrlive/media/einslivedigi.m3u&lt;/res&gt;&lt;upnp:class&gt;object.item.audioItem.audioBroadcast&lt;/upnp:class&gt;&lt;/item&gt;&lt;/DIDL-Lite&gt;</metadata>
      <id>Radio0</id>
      <refid>leer</refid>
      <parentid>leer</parentid>
      <restricted>leer</restricted>
      <artist>leer</artist>
      <album>leer</album>
      <title>1LIVE diggi</title>
      <albumArtURI>http://d1i6vahw24eb07.cloudfront.net/s45087q.png</albumArtURI>
      <genre>leer</genre>
      <date>leer</date>
      <originalTrackNumber>leer</originalTrackNumber>
      <class>object.item.audioItem.audioBroadcast</class>
      <resource>http://www.wdr.de/wdrlive/media/einslivedigi.m3u</resource>
      <duration>leer</duration>
      <size>leer</size>
      <bitrate>leer</bitrate>
     </Track0>
    Offenbar geschieht dies erst beim speichern. Hier der Anfang der vom Browser angezeigten Datei (zu achten auf <metadata>):

    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <Playlist>
    <Track0>
    <typ>item</typ>
    <metadata><DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/"><item id="Radio0"><dc:title>1LIVE diggi</dc:title><upnp:albumArtURI>http://d1i6vahw24eb07.cloudfront.net/s45087q.png</upnp:albumArtURI><res protocolInfo="http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=03700000000000000000000000000000">http://www.wdr.de/wdrlive/media/einslivedigi.m3u</res><upnp:class>object.item.audioItem.audioBroadcast</upnp:class></item></DIDL-Lite></metadata>
    <id>Radio0</id>
    <refid>leer</refid>
    <parentid>leer</parentid>
    <restricted>leer</restricted>
    <artist>leer</artist>
    <album>leer</album>
    <title>1LIVE diggi</title>
    <albumArtURI>http://d1i6vahw24eb07.cloudfront.net/s45087q.png</albumArtURI>
    <genre>leer</genre>
    <date>leer</date>
    <originalTrackNumber>leer</originalTrackNumber>
    <class>object.item.audioItem.audioBroadcast</class>
    <resource>http://www.wdr.de/wdrlive/media/einslivedigi.m3u</resource>
    <duration>leer</duration>
    <size>leer</size>
    <bitrate>leer</bitrate>
    </Track0>
    Wichtig ist, dass <MetaData> so bleibt wie es ist. Hoffe Ihr könnt mir einen Tipp geben.

    Gruß

    André

  • #2
    wieso speicherst du xml nicht mit http://php.net/manual/en/domdocument.savexml.php.
    da könnte man es ja mal mit
    Code:
    disable-output-escaping="yes"
    versuchen.

    Kommentar


    • #3
      Danke. Brachte aber leider nix:

      PHP-Code:
      <?

      /*//////////////////////////////////////////////////////////////////////////////
      Array der vordefinierten Radiosender aus UPNP_Radio_Presets.ips.php lesen und
      in die Datei IP-Symcon/webfront/user/Multimedia/Browse/Playlist/Radio.xml
      schreiben
      //////////////////////////////////////////////////////////////////////////////*/

      include ("UPNP_Constants.ips.php");
      include ("UPNP_Radio_Presets.ips.php");

      $Track = "";

      for($i=0,$size=count($Radio);$i<$size;$i++)
      {
      $Title = ($Radio["$i"]['title']);
      $AlbumArtURI = ($Radio["$i"]['albumArtURI']);
      $Resource = ($Radio["$i"]['resource']);

      $MetaData = '&lt;DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/"&gt;&lt;item id="Radio'.$i.'"&gt;&lt;dc:title&gt;'.$Title.'&lt;/dc:title&gt;&lt;upnp:albumArtURI&gt;'.$AlbumArtURI.'&lt;/upnp:albumArtURI&gt;&lt;res protocolInfo="http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=03700000000000000000000000000000"&gt;'.$Resource.'&lt;/res&gt;&lt;upnp:class&gt;object.item.audioItem.audioBroadcast&lt;/upnp:class&gt;&lt;/item&gt;&lt;/DIDL-Lite&gt;';
      //$MetaData = '';

      $Track .= '
       <Track'.$i.'>
        <typ>item</typ>
        <metadata disable-output-escaping="yes">'.$MetaData.'</metadata>
        <id>Radio'.$i.'</id>
        <refid>leer</refid>
        <parentid>leer</parentid>
        <restricted>leer</restricted>
        <artist>leer</artist>
        <album>leer</album>
        <title>'.$Title.'</title>
        <albumArtURI>'.$AlbumArtURI.'</albumArtURI>
        <genre>leer</genre>
        <date>leer</date>
        <originalTrackNumber>leer</originalTrackNumber>
        <class>object.item.audioItem.audioBroadcast</class>
        <resource>'.$Resource.'</resource>
        <duration>leer</duration>
        <size>leer</size>
        <bitrate>leer</bitrate>
       </Track'.$i.'>';
       
      }

      $xml = '<?xml version="1.0" encoding="UTF-8"?>
      <Playlist>'.$Track.'
      </Playlist>';
      $xml = new SimpleXMLElement($xml);
      echo($xml);

      //Radio-Presets in /webfront/user/Multimedia/Browse/Playlist/Radio.xml schreiben
      $xml->saveXML($Kernel."webfront/user/Multimedia/Browse/Playlist/Radio.xml");

              
      ?>
      Gruß André

      Kommentar


      • #4
        Wie wäre es mit
        Code:
        <![CDATA[Inhalt]]>
        ?
        [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

        Kommentar


        • #5
          kommt bei mir so raus:

          PHP-Code:
          <?php

          /*//////////////////////////////////////////////////////////////////////////////
          Array der vordefinierten Radiosender aus UPNP_Radio_Presets.ips.php lesen und
          in die Datei IP-Symcon/webfront/user/Multimedia/Browse/Playlist/Radio.xml
          schreiben
          //////////////////////////////////////////////////////////////////////////////*/


          $MetaData '&lt;DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/"&gt;&lt;item id="Radioi"&gt;&lt;dc:title&gt; Title &lt;/dc:title&gt;&lt;upnp:albumArtURI&gt; AlbumArtURI &lt;/upnp:albumArtURI&gt;&lt;res protocolInfo="http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=03700000000000000000000000000000"&gt; $Resource &lt;/res&gt;&lt;upnp:class&gt;object.item.audioItem.audioBroadcast&lt;/upnp:class&gt;&lt;/item&gt;&lt;/DIDL-Lite&gt;';
          //$MetaData = '';

          $Track '
           <Tracki>
            <typ>item</typ>
            <metadata disable-output-escaping="yes">'
          .$MetaData.'</metadata>
            <id>Radioi</id>
            <refid>leer</refid>
            <parentid>leer</parentid>
            <restricted>leer</restricted>
            <artist>leer</artist>
            <album>leer</album>
            <title>title</title>
            <albumArtURI>AlbumArtURI</albumArtURI>
            <genre>leer</genre>
            <date>leer</date>
            <originalTrackNumber>leer</originalTrackNumber>
            <class>object.item.audioItem.audioBroadcast</class>
            <resource>Resource</resource>
            <duration>leer</duration>
            <size>leer</size>
            <bitrate>leer</bitrate>
           </Tracki>'
          ;
           


          $xml '<?xml version="1.0" encoding="UTF-8"?>
          <Playlist>'
          .$Track.'
          </Playlist>'
          ;
          $xml = new SimpleXMLElement($xml);
          echo(
          $xml);

          //Radio-Presets in /webfront/user/Multimedia/Browse/Playlist/Radio.xml schreiben
          $xml->saveXML("Radio.xml");
          Code:
          # cat Radio.xml 
          
              
              
              
          
          
          Code:
          <?xml version="1.0" encoding="UTF-8"?>
          <Playlist>
           <Tracki>
            <typ>item</typ>
            <metadata disable-output-escaping="yes">&lt;DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/"&gt;&lt;item id="Radioi"&gt;&lt;dc:title&gt; Title &lt;/dc:title&gt;&lt;upnp:albumArtURI&gt; AlbumArtURI &lt;/upnp:albumArtURI&gt;&lt;res protocolInfo="http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=03700000000000000000000000000000"&gt; $Resource &lt;/res&gt;&lt;upnp:class&gt;object.item.audioItem.audioBroadcast&lt;/upnp:class&gt;&lt;/item&gt;&lt;/DIDL-Lite&gt;</metadata>
            <id>Radioi</id>
            <refid>leer</refid>
            <parentid>leer</parentid>
            <restricted>leer</restricted>
            <artist>leer</artist>
            <album>leer</album>
            <title>title</title>
            <albumArtURI>AlbumArtURI</albumArtURI>
            <genre>leer</genre>
            <date>leer</date>
            <originalTrackNumber>leer</originalTrackNumber>
            <class>object.item.audioItem.audioBroadcast</class>
            <resource>Resource</resource>
            <duration>leer</duration>
            <size>leer</size>
            <bitrate>leer</bitrate>
           </Tracki>
          </Playlist>
          aber mir wäre ein gekürztes und portables beispiel lieber gewesen, zumal ich mich permannent vertippe.

          Kommentar


          • #6
            @moma

            Danke für den Einsatz

            Warum auch immer stimmt die Ausgabe zwar in einem Texteditor, aber bei einem Browser bekomme ich eine interpretierte Ausgabe. Ich hatte zur Playlisterstellung das ganze über ein Array, welches über Array2XML konvertiert wird so abspeichern können, das die Zeichenkette erhalten blieb.

            Das werde ich dann wohl als Workaround genauso machen, obwohl komplizierter.

            @ChristianK

            Mit <![CDATA[Inhalt]]> bleibt es zwar erhalten, aber ich müsste dann den zusätzlichen Ausdruck CDATA wieder cutten.

            Gruß Andr´´e

            Kommentar


            • #7
              wieso interpretiert der browser wohl htmlentities:
              http://www.w3schools.com/HTML/html_entities.asp

              dann gehts wohl mit<![CDATA[Inhalt]]> oder eben mit regex. also aus "&lt;" -> "&amp;lt;" machen; so amchen es jedenfalls die leute von w3cshool in der verlinkten seite.
              achja irgendwas damit ging noch http://php.net/manual/en/function.htmlentities.php, glaub ich.

              Kommentar


              • #8
                ... schon klar. Aber warum interpretiert der Browser (und damit auch einige DLNA-Geräte) bei gleicher Syntax einmal ohne Umwandlung und bei o.g. Script mit Umwandlung.
                Habe es jetzt auf die Alternative umgestellt und jetzt funktioniert es...

                Trotzdem Allen Danke für die Mühe...

                Kommentar


                • #9
                  Das was du im browser siehst ist der Standard Content-Type Parser-output ( was by default text/html ist ). Schau in den Quellcode der dargestellten Seite oder sende einen header.

                  PHP-Code:
                  header('Content-Type: text/xml; charset=utf-8'); 
                  Grundlegend rate ich zu Libraries die auto-quoting unterstützen und das benutzen von der realen Formatierung.

                  PHP-Code:
                  <?php

                  $resource 
                  'foobar:baz';

                  $data = <<<PLAIN
                  <DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/">
                      <item id="Radioi">
                          <dc:title>Title</dc:title>
                          <upnp:albumArtURI>AlbumArtURI</upnp:albumArtURI>
                          <res protocolInfo="http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=03700000000000000000000000000000">
                              
                  {$resource} 
                          </res>
                          <upnp:class>object.item.audioItem.audioBroadcast</upnp:class>
                      </item>
                  </DIDL-Lite>
                  PLAIN;

                  $dom = new DOMDocument('1.0''utf-8');

                  $metaData $dom->createElement('metdata'$data);

                  header('Content-Type: text/xml');

                  echo 
                  $dom->saveHtml($metaData);
                  Browser rendered:
                  Code:
                  <metdata> <!-- als tag -->
                  <DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/"> <item id="Radioi"> <dc:title>Title</dc:title> <upnp:albumArtURI>AlbumArtURI</upnp:albumArtURI> <res protocolInfo="http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=03700000000000000000000000000000"> foobar:baz </res> <upnp:class>object.item.audioItem.audioBroadcast</upnp:class> </item> </DIDL-Lite> <!-- als text -->
                  </metdata>
                  Das was der browser bekommt:
                  Code:
                  <metdata>&lt;DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/"&gt;
                      &lt;item id="Radioi"&gt;
                          &lt;dc:title&gt;Title&lt;/dc:title&gt;
                          &lt;upnp:albumArtURI&gt;AlbumArtURI&lt;/upnp:albumArtURI&gt;
                          &lt;res protocolInfo="http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=03700000000000000000000000000000"&gt;
                              foobar:baz 
                          &lt;/res&gt;
                          &lt;upnp:class&gt;object.item.audioItem.audioBroadcast&lt;/upnp:class&gt;
                      &lt;/item&gt;
                  &lt;/DIDL-Lite&gt;</metdata>
                  Wenn der Browser nicht rendern soll sende den Mime-Type text/plain.
                  [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                  Kommentar

                  Lädt...
                  X