Ich habe auf Stackoverflow nach diesem Problem gesucht und ein paar Themen gefunden, aber ich habe das Gefühl, dass es für mich keine wirklich klare Antwort gibt.
Ich habe ein Formular, das Benutzer ausfüllen und dessen Wert in einer XML-Datei speichern. Die XML ist auf UTF-8 codiert.
Ab und zu kopiert ein Benutzer Text aus irgendeiner Quelle und das ist, wenn ich den Fehler "Entität nicht definiert" bekomme.
Ich erkenne, dass XML nur eine Auswahl von Entitäten unterstützt und alles darüber hinaus nicht erkannt wird - daher der Parserfehler.
Nach meinem Verständnis gibt es einige Optionen, die ich gesehen habe:
- Ich kann alle finden und durch oder ein tatsächliches Leerzeichen ersetzen.
- Ich kann den betreffenden Code in einen CDATA-Bereich setzen.
- Ich kann diese Entitäten in die XML-Datei aufnehmen.
Was ich mit der XML-Datei mache, ist, dass der Benutzer Inhalte in ein Formular eingeben kann, es in einer XML-Datei gespeichert wird und dieser Inhalt dann als XHTML auf einer Webseite angezeigt wird (geparst mit SimpleXML).
Von den drei Optionen oder anderen Optionen, von denen ich nichts weiß, was ist wirklich der beste Weg, um mit diesen Entitäten umzugehen?
Vielen Dank, Ryan
UPDATE
Ich möchte mich bei allen für das großartige Feedback bedanken. Tatsächlich habe ich festgestellt, was meine Entitätsfehler verursacht hat. Alle Vorschläge haben mich dazu gebracht, genauer hinzusehen!
Einige Textfelder waren einfache Textfelder, aber meine Textareas wurden mit TinyMCE verbessert. Es stellte sich heraus, dass die PHP-Warnungen immer auf Daten aus den TinyMCE-verbesserten Textareas verwiesen. Später bemerkte ich auf einem PC, dass alle Zeichen entfernt wurden (weil es sie nicht lesen konnte), aber auf einem MAC konnte man kleine quadratische Kästchen sehen, die auf die Unicode-Nummer dieses Zeichens verwiesen. Der Grund, warum es auf einem MAC überhaupt in Quadraten angezeigt wurde, ist, weil ich utf8_encode verwendet habe, um Daten, die nicht in UTF waren, zu codieren, um andere Parsingfehler zu verhindern (was irgendwie auch mit TinyMCE zusammenhängt).
Die Lösung für all dies war ziemlich einfach:
Ich habe diese Zeile entity_encoding : "utf-8"
in meinem tinyMCE.init hinzugefügt. Jetzt werden alle Zeichen so angezeigt, wie sie angezeigt werden sollen.
Das Einzige, was ich nicht verstehe, ist, warum die Zeichen immer noch angezeigt werden, wenn sie in Textfelder eingefügt werden, weil nichts sie in UTF konvertiert, aber mit TinyMCE war das ein Problem.