Ich schreibe das, weil ich wirklich an die Wand gegangen bin und nicht weitermachen kann. In meiner Datenbank habe ich HTML wie folgt entkernt: "<p>My name is Freddy and I was"
.
Ich möchte es als HTML anzeigen ODER die HTML-Tags in meiner XSL-Vorlage entfernen. Beide Lösungen werden für mich funktionieren und ich werde die schnellere Lösung wählen.
Ich habe mehrere Beiträge online gelesen, kann aber keine Lösung finden. Ich habe auch disable-output-escape ohne Erfolg versucht. Grundsätzlich scheint das Problem darin zu bestehen, dass die Engine irgendwo in der XSL-Ausführung dieses <p>
in folgendes umwandelt: &lt;p&gt;
.
Es konvertiert die &
in &
. Wenn es hilft, hier ist mein XSL-Code. Ich habe mehrere Kombinationen mit und ohne das Ausgabe-Tag auf der Oberseite versucht.
Jede Hilfe wird geschätzt. Vielen Dank im Voraus.
%Vor%Basierend auf der Annahme, dass Sie diese HTML-Zeichenfolge haben
%Vor%Wenn Sie es dann umgehen und in einer Datenbank speichern, wird es dies :
%Vor%Wenn Sie das Ergebnis als XML abrufen (ohne es zuvor zu entfernen), wäre das Ergebnis this :
%Vor% und <xsl:value-of select="." disable-output-escaping="yes" />
würden erzeugen:
Sie erhalten genau das gleiche, was Sie in Ihrer Datenbank haben, aber natürlich sehen Sie die HTML-Tags in der Ausgabe. Was Sie also brauchen, ist ein Mechanismus, der die folgenden String-Ersetzungen durchführt:
"&lt;"
mit "<"
(effektiv ändern <
zu <
in unescaped output) "&gt;"
mit ">"
(effektiv ändern >
zu >
in unescaped output) "&quot;"
mit """
(effektiv ändern "
zu "
in unescaped output) "&amp;"
mit "&"
(effektiv ändern &
zu &
in unescaped output) Von Ihrem XSL habe ich die folgende Testeingabe-XML abgeleitet:
%Vor%Ich habe das von Ihnen bereitgestellte Stylesheet geändert und einen solchen Ersetzungsmechanismus implementiert. Wenn Sie die folgende XSLT 1.0-Vorlage darauf anwenden:
%Vor%Dann wird dieses Ausgabe-HTML erzeugt:
%Vor%Hinweis
<my:unescape>
) zum Erstellen einer Liste von zu ersetzenden Zeichen unescape
, um die Information zu transportieren, welches Zeichen gerade ersetzt werden soll Außerdem beachten Sie:
templatenumber
) <xsl:attribute>
-Elemente erforderlich. Sie können sicher durch Inline-Notation ( attributename="{attributevalue}"
) concat()
zum Erstellen der URL Im Allgemeinen ist es eine schlechte Idee, entkerntes HTML in einer Datenbank zu speichern (allgemeiner gesagt: Es ist eine schlechte Idee, HTML in einer Datenbank zu speichern.). Sie stellen sich auf alle möglichen Probleme ein, dies ist einer von ihnen. Wenn Sie diese Einstellung nicht ändern können, hoffe ich, dass Ihnen die Lösung hilft.
Ich kann nicht garantieren, dass es in allen Situationen das Richtige tut, und es kann zu Sicherheitslücken führen (denke XSS), aber der Umgang damit war nicht Teil der Frage. In jedem Fall solltest du dich selbst gewarnt fühlen.
Ich brauche jetzt eine Pause. ; -)
Sie sollten nicht maskiertes HTML in Ihrer Datenbank speichern. Wenn Ihre Datenbank das tatsächliche & lt; Zeichen, dann würde der Befehl "disable-output-escaping" tun, was Sie wollten.
Wenn Sie die Daten nicht ändern können, müssen Sie die Daten vor der Transformation entschlüsseln.
Es ist eine schlechte Idee, HTML in einer Datenbank zu speichern
Was? Wie soll man es dann speichern? In einem XML-Dokument müssen Sie also XSLT verwenden? Als Webentwickler haben wir immer SQL-Datenbanken verwendet, um benutzerdefinierte HTML-Daten zu speichern. Es ist nichts falsch mit dieser Methode, solange es für Ihre Zwecke richtig bereinigt ist.