echo $begrüßung;
Fangen wir von vorne an: Ich baue mir mit Hilfe von DOMImplementation von PHP ein XML-Dokument in UTF-8. Damit auch jeder Inhalt der erstellten XML-Tags akzeptiert werden, muss ich sie maskieren, mittels htmlentites (sorry, ein anderer Weg ist mir grad nicht eingefallen).
Nein, das ist nicht notwendig, da die notwendigen Maskierungen von den DOM-Funktionen selbst vorgenommen werden. Du übergibst einfach nur reinen Text in dem dafür vorgesehenen Parameter.
htmlentities() ist auch die falsche Funktion, da XML nur für die 5 Zeichen & < > " ' Entities deklariert. Aber egal, ob du nun htmlentities() oder htmlspecialchars() verwendest, wird das Ergebnis von den DOM-Funktionen als reiner Text interpretiert und das einleitende & erneut maskiert.
Bei Anwendung von saveXML() - also den generierten Baum als String speichern, werden scheinbar < und >, die im normalen Text enthalten sind, automatisch maskiert.
Nicht nur scheinbar, das ist definiertes Verhalten.
Das sind übrigens öffnende und schließende HTML-Tags, die mittels eines Editors eingegeben wurden -> d.h. Wohlgeformtheit bleibt erhalten. Ich weiß ganz genau, ich habe sie nicht maskiert. Um sie wieder zu ordentlichen Tags zu machen, muss ich sie mit html_entity_decode wieder umwandeln.
Das heißt also, du möchtest diese Eingabe nicht als reinen Text betrachten sondern als XML-Fragment? Dann musst du das auch so bekanntgeben und DOMDocumentFragment->appendXML() benutzen.
Dummerweise werden auf diesem Weg auch die einfachen größer und kleiner im Text (" 1 < 2 < 3 > 2 > 1") wieder zurück verwandelt.
Anhand welcher Kriterien soll man denn, wenn man ein dummer Computer ist, unterscheiden, ob ein < nun die Einleitung eines Tags ist oder ein Text-Bestandteil? Oder andersrum, dass das eine & zu einen Tag-Einleitung und das andere & zu einem Textzeichen umzukodieren ist?
Beim Laden des XML-Strings in ein neues XML-Dokument mittels new DomDocument und loadXML() sagt der:
Warning: DOMDocument::loadXML(): xmlParseEntityRef: no name in Entity,
DOMDocument::loadXML(): StartTag: invalid element name in Entity
Das wird eines der in HTML aber nicht in XML vorhandenen Entities sein.
echo "$verabschiedung $name";