Start · Sprachen · PHP · Referenz · xmlwriter_end_dtd_entity

xmlwriter_end_dtd_entity

Funktion

Beendet eine DTD-Entitätsdeklaration im XML-Dokument, die zuvor mit <code>xmlwriter_start_dtd_entity()</code> geöffnet wurde.

seit PHP 5.1.2 Kategorie: xml

Signatur

xmlwriter_end_dtd_entity(XMLWriter $writer): bool

Beschreibung

xmlwriter_end_dtd_entity() schließt eine DTD-Entitätsdeklaration, die mit xmlwriter_start_dtd_entity() begonnen wurde. Die Funktion schreibt das schließende Tag der Entitätsdeklaration in den internen Puffer des XMLWriter-Objekts.

DTD-Entitäten (Document Type Definition Entities) ermöglichen es, wiederverwendbare Zeichenketten oder externe Ressourcen innerhalb eines XML-Dokuments zu definieren. Sie werden innerhalb des <!DOCTYPE>-Blocks deklariert und können später im Dokument referenziert werden.

Die Funktion ist Teil der prozeduralen Schnittstelle von XMLWriter. In der objektorientierten Variante steht die Methode XMLWriter::endDtdEntity() zur Verfügung. Ein korrekter Aufbau erfordert die Verschachtelung: zuerst xmlwriter_start_dtd(), dann xmlwriter_start_dtd_entity(), und zum Abschluss xmlwriter_end_dtd_entity() und xmlwriter_end_dtd().

Die Funktion gibt true zurück, wenn die Entität erfolgreich abgeschlossen wurde, andernfalls false. Sie sollte nur aufgerufen werden, wenn zuvor tatsächlich eine DTD-Entität gestartet wurde.

Parameter

Name Typ Default Beschreibung
$writer Pflicht XMLWriter Die XMLWriter-Instanz, auf der die DTD-Entität beendet werden soll. Diese wird durch xmlwriter_open_memory() oder xmlwriter_open_uri() erzeugt.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die DTD-Entität erfolgreich beendet wurde, oder false bei einem Fehler (z. B. wenn keine DTD-Entität geöffnet war).

Beispiele

Interne DTD-Entität definieren und ausgeben

<?php
$writer = xmlwriter_open_memory();
xmlwriter_set_indent($writer, true);
xmlwriter_set_indent_string($writer, '  ');

xmlwriter_start_document($writer, '1.0', 'UTF-8');

// DTD öffnen
xmlwriter_start_dtd($writer, 'root');

// Interne Entität definieren
xmlwriter_start_dtd_entity($writer, 'sitename', false);
xmlwriter_text($writer, 'Meine tolle Webseite');
xmlwriter_end_dtd_entity($writer);

// DTD schließen
xmlwriter_end_dtd($writer);

// Root-Element
xmlwriter_start_element($writer, 'root');
xmlwriter_text($writer, 'Willkommen bei &sitename;');
xmlwriter_end_element($writer);

xmlwriter_end_document($writer);

echo xmlwriter_output_memory($writer);
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE root [ <!ENTITY sitename "Meine tolle Webseite"> ]> <root>Willkommen bei &sitename;</root>

Externe DTD-Entität (Parameter-Entität) deklarieren

<?php
$writer = xmlwriter_open_memory();
xmlwriter_set_indent($writer, true);
xmlwriter_set_indent_string($writer, '  ');

xmlwriter_start_document($writer, '1.0', 'UTF-8');

xmlwriter_start_dtd($writer, 'catalog');

// Parameter-Entität (true = Parameter-Entität)
xmlwriter_start_dtd_entity($writer, 'common', true);
xmlwriter_text($writer, 'Gemeinsame Definitionen');
xmlwriter_end_dtd_entity($writer);

xmlwriter_end_dtd($writer);

xmlwriter_start_element($writer, 'catalog');
xmlwriter_end_element($writer);

xmlwriter_end_document($writer);

echo xmlwriter_output_memory($writer);
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE catalog [ <!ENTITY % common "Gemeinsame Definitionen"> ]> <catalog/>

// Wichtig · Fallstricke

Reihenfolge beachten: xmlwriter_end_dtd_entity() darf nur aufgerufen werden, wenn zuvor xmlwriter_start_dtd_entity() aufgerufen wurde. Ein falscher Aufruf ohne vorherige Öffnung führt zu false als Rückgabewert, ohne eine Exception zu werfen.

Sicherheit: DTD-Entitäten können bei der Verarbeitung durch XML-Parser Sicherheitsrisiken erzeugen (z. B. XML External Entity (XXE)-Angriffe). Die hier erzeugte DTD sollte nur für kontrollierte, vertrauenswürdige Szenarien eingesetzt werden, wenn das Dokument anschließend selbst geparst wird.

Ab PHP 8.0 wird statt einer XMLWriter-Ressource ein echtes XMLWriter-Objekt erwartet. Die prozedurale API ist jedoch weiterhin verfügbar.