2012-05-24 12 views
6

Ich habe seit einiger Zeit damit zu kämpfen. Ich habe eine mehrsprachige Web-App, die XML irgendwann ausgibt. Dieser XML-Code kann eine beliebige Sprache enthalten. Daher bestand meine Vorgehensweise bei der Bereinigung darin, bestimmte Zeichen, die das Einfügen von XML-Code verhindern, nicht zuzulassen. Das und Wrapping so viel wie ich kann in CDATA, aber ich habe eine Tonne Inhalt in den Attributen. Ich möchte Sonderzeichen nicht verbieten, weil immer gültige Zeichen wie Klammern, Punkte, Bindestriche, Zecken und Apostrophe verwendet werden und sie funktionieren.Wie wird ein Formularfeld für ein XML-Attribut bereinigt, das gültige UTF8-Zeichen enthält?

Was ist der beste Weg, um alle Zeichen zu entfernen, die ein XML-Attribut brechen, aber Sprachen intakt lassen?

UPDATE:
ich gefunden: http://en.wikipedia.org/wiki/CDATA#CDATA-type_attribute_value, die mir zeigte, dass ich ein Attribut als CDATA-Abschnitt beschreiben DTD; dies ist jedoch nicht wahr, so scheint es.

Jeder Prüfer wird sich beschweren, dass Bulle keine Entität im Attribut ist. Wenn Sie das Attribut entfernen, ist es gültig. Auch ich höre Schemata sind der Weg zu gehen, also wenn etwas wie das oben genannte möglich ist, aber ein XML-Schema stattdessen verwendend, würde das fantastisch sein.

Danke!

+0

gleiches Problem, wenn ich versuche HTML-Attribut auf dem Element zu speichern, dann tun zu entkommen i/unescape –

+0

Durch die Art und Weise, wenn ich die Wahl hätte ich alles aus den Attributen nehmen würde, aber es ist noch nicht meine Entscheidung: p. – Parris

Antwort

2

dies gilt

<?xml version="1.0" ?> 
<!DOCTYPE foo [ 
    <!ELEMENT foo EMPTY> 
    <!ATTLIST foo a CDATA #REQUIRED> 
]> 
<foo a="&amp;bull;"><![CDATA[ &bull; ]]> </foo> 

Sie Sonderzeichen übersetzen können Objekte in HTML mit

htmlentities($str); 

und Umkehr mit

html_entity_decode($str); 

siehe: http://www.php.net/manual/en/function.htmlentities.php

siehe auch „html Meta-Zeichen“

-1

Alles, was Sie tun müssen, ist wickeln sie in <!CDATA[ ]]> Tags. Sie können auch eine Fülle von Dingen einwerfen.

attr="<!CDATA[' . htmlentities($value) . ']]>" 
+0

-1, Parris

Verwandte Themen