Start · Sprachen · PHP · Referenz · xmlrpc_decode

xmlrpc_decode

Funktion

Dekodiert einen XML-RPC-kodierten String in native PHP-Typen (Array, String, Int, Boolean usw.).

seit PHP 4.1.0 Kategorie: xml

Signatur

xmlrpc_decode(string $xml, string $encoding = 'iso-8859-1'): mixed

Beschreibung

xmlrpc_decode() wandelt einen XML-RPC-formatierten XML-String in den entsprechenden nativen PHP-Datentyp um. Dabei werden XML-RPC-Typen wie <int>, <string>, <boolean>, <array> und <struct> automatisch in ihre PHP-Entsprechungen konvertiert.

Die Funktion ist besonders nützlich, wenn man Antworten eines XML-RPC-Servers verarbeiten möchte, ohne manuell den XML-Baum zu parsen. Das Ergebnis ist direkt als PHP-Variable verwendbar.

Achtung: Die gesamte XMLRPC-Extension (xmlrpc) gilt seit PHP 8.0 als experimentell und wird seit PHP 8.4 als veraltet (deprecated) eingestuft. Für neue Projekte sollte stattdessen eine moderne XML-RPC-Bibliothek wie phpxmlrpc/phpxmlrpc verwendet werden.

Der optionale Parameter $encoding gibt die Zeichenkodierung des übergebenen XML-Strings an. Standardmäßig wird iso-8859-1 angenommen; für moderne Anwendungen empfiehlt sich utf-8.

Parameter

Name Typ Default Beschreibung
$xml Pflicht string Ein gültiger XML-RPC-kodierter XML-String, der dekodiert werden soll.
$encoding string iso-8859-1 Die Zeichenkodierung des übergebenen $xml-Strings, z. B. 'utf-8' oder 'iso-8859-1'.

Rückgabewert

Typ
mixed
Beschreibung
Gibt den dekodierten PHP-Wert zurück. Dies kann ein skalarer Typ (int, float, string, bool), ein array (für XML-RPC-Arrays und -Structs) oder null bei einem Fehler sein.

Beispiele

Einfachen XML-RPC-Wert dekodieren

<?php
// Ein einfacher XML-RPC-String mit einem Integer-Wert
$xml = '<?xml version="1.0"?>
<methodResponse>
  <params>
    <param>
      <value><int>42</int></value>
    </param>
  </params>
</methodResponse>';

$result = xmlrpc_decode($xml, 'utf-8');
var_dump($result);
// Gibt den dekodierten PHP-Integer aus
int(42)

XML-RPC-Struct als PHP-Array dekodieren

<?php
// Ein XML-RPC-Struct mit mehreren Feldern
$xml = '<?xml version="1.0" encoding="utf-8"?>
<methodResponse>
  <params>
    <param>
      <value>
        <struct>
          <member>
            <name>name</name>
            <value><string>Max Mustermann</string></value>
          </member>
          <member>
            <name>age</name>
            <value><int>30</int></value>
          </member>
          <member>
            <name>active</name>
            <value><boolean>1</boolean></value>
          </member>
        </struct>
      </value>
    </param>
  </params>
</methodResponse>';

$data = xmlrpc_decode($xml, 'utf-8');
echo $data['name'] . PHP_EOL;   // Max Mustermann
echo $data['age'] . PHP_EOL;    // 30
var_dump($data['active']);       // bool(true)
Max Mustermann 30 bool(true)

Antwort eines XML-RPC-Servers verarbeiten

<?php
// Simulierte Serverantwort als String
$serverResponse = '<?xml version="1.0"?>
<methodResponse>
  <params>
    <param>
      <value>
        <array>
          <data>
            <value><string>Apfel</string></value>
            <value><string>Banane</string></value>
            <value><string>Kirsche</string></value>
          </data>
        </array>
      </value>
    </param>
  </params>
</methodResponse>';

$fruits = xmlrpc_decode($serverResponse, 'utf-8');
foreach ($fruits as $fruit) {
    echo $fruit . PHP_EOL;
}
Apfel Banane Kirsche

// Wichtig · Fallstricke

Deprecation: Die xmlrpc-Extension ist seit PHP 8.0 als experimentell markiert und seit PHP 8.4 als deprecated eingestuft. Sie könnte in einer zukünftigen PHP-Version entfernt werden. Für produktive Anwendungen wird die Verwendung einer externen Bibliothek wie phpxmlrpc/phpxmlrpc empfohlen.

Sicherheit: Der übergebene XML-String sollte aus vertrauenswürdigen Quellen stammen. Unkontrolliertes Parsen von XML aus externen Quellen kann zu Denial-of-Service-Angriffen (z. B. XML-Bomben) oder XXE-Angriffen führen. Es empfiehlt sich, die Eingabe vor dem Dekodieren zu validieren und die Größe zu begrenzen.

Verfügbarkeit: Die Funktion ist nur verfügbar, wenn PHP mit der xmlrpc-Extension kompiliert wurde (entweder eingebaut oder als PECL-Paket). Auf modernen Systemen muss die Extension ggf. explizit installiert werden.