Signatur
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
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);
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);
// 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.