Hier müssen Sie diese Zeichen nicht codieren. XML-Zeichenfolgen können UTF-8 oder eine andere Codierung verwenden. Abhängig von der Codierung wird der Serializer bei Bedarf codieren.
$foo = new SimpleXmlElement('<?xml version="1.0" encoding="UTF-8"?><foo/>');
$foo->addChild('bar', 'μmol/l, x10³ cells/µl');
echo $foo->asXml();
Ausgabe (Sonderzeichen codiert nicht):
<?xml version="1.0" encoding="UTF-8"?>
<foo><bar>μmol/l, x10³ cells/µl</bar></foo>
Einheiten für die Sonderzeichen Um zu erzwingen, müssen Sie die Codierung ändern:
$foo = new SimpleXmlElement('<?xml version="1.0" encoding="ASCII"?><foo/>');
$foo->addChild('bar', 'μmol/l, x10³ cells/µl');
echo $foo->asXml();
Ausgang (Sonderzeichen codiert) :
<?xml version="1.0" encoding="ASCII"?>
<foo><bar>μmol/l, x10³ cells/µl</bar></foo>
Ich schlage vor, dass Sie Ihre benutzerdefinierte Codierung zurück in UTF-8 konvertieren. Auf diese Weise kann die XML Api sich darum kümmern. Wenn Sie eine Zeichenfolge mit der benutzerdefinierten Kodierung speichern möchten, müssen Sie um arbeiten.
Eine Zeichenfolge wie x10<su
löst einen Fehler in SimpleXML/DOM aus. Das zweite Argument von SimpleXMLElement::addChild()
und DOMDocument::createElement()
haben ein gebrochenes entkommen. Sie müssen den Inhalt als Textknoten erstellen und anhängen.
Hier ist eine kleine Klasse, die SimpleXMLElement und fügt eine Abhilfe erweitert:
class MySimpleXMLElement extends SimpleXMLElement {
public function addChild($nodeName, $content = NULL) {
$child = parent::addChild($nodeName);
if (isset($content)) {
$node = dom_import_simplexml($child);
$node->appendChild($node->ownerDocument->createTextNode($content));
}
return $child;
}
}
$foo = new MySimpleXmlElement('<?xml version="1.0" encoding="UTF-8"?><foo/>');
$foo->addChild('bar', 'x10<su');
echo $foo->asXml();
Ausgang:
<?xml version="1.0" encoding="UTF-8"?>
<foo><bar>&#120&#49&#48&#60&#115&#117</bar></foo>
Die &
aus Ihrer benutzerdefinierten Codierung als &
Einheit entkommen lassen - weil es eine ist Sonderzeichen in XML. Der XML-Parser wird es entschlüsseln.
$xml = <<<'XML'
<?xml version="1.0" encoding="UTF-8"?>
<foo><bar>&#120&#49&#48&#60&#115&#117</bar></foo>
XML;
$foo = new SimpleXMLElement($xml);
var_dump((string)$foo->bar);
Output:
string(27) "x10<su"
Ich habe diese Werte in der Datenbank ... & # 120 & # 49 & # 48 & # 60 & # 115 & # 117 & # 112 & # 62 & # 54 & # 60 & # 47 & # 115 & # 117 & # 112 & # 62 & # 32 & # 99 & # 101 & # 108 & # 108 & # 115 & # 47 & # 181 & # 108 –