Ich habe kürzlich Inhalt und Codebase von einer alten Sitecore CMS 6.5-Installation (mit einer ganzen Reihe von Anpassungen) auf eine Neuinstallation von CMS 7.0 verschoben.
In der ursprünglichen Site wurde ein Single-line text
-Feld verwendet, um beliebiges Javascript in die Seite zu rendern (für das Tracking). Dies funktionierte gut und das Javascript wurde in die Seite gerendert, uncodiert und wie erwartet ausgeführt.
In der neuen Installation habe ich jedoch festgestellt, dass der Inhalt jetzt HTML-codiert ist, was bedeutet, dass er nicht unter der Sitecore 7-Installation ausgeführt wird, mit der ich arbeite.
In meinem Sublayout habe ich einen FieldRenderer wie folgt:
%Vor%Ich bin mir nicht sicher, ob es eine Anpassung / Konfiguration gibt, die ich nicht migriert habe, oder ob dies eine Änderung ist, die in Sitecore 7 eingeführt wurde (möglicherweise aus Sicherheitsgründen).
Kann irgendjemand etwas dazu sagen? Muss ich meinen eigenen Feldtyp erstellen, um das gewünschte Verhalten zu ermöglichen, oder gibt es eine Möglichkeit, dies mit 'out of the box'-Feldtypen zu tun?
Ich habe die GetTextFieldValue-Prozessorklasse von Sitecore 6.5 und von 7 überprüft und sieht anders aus
Dies ist von Sitecore 6.5: Sitecore.Pipelines.RenderField.GetTextFieldValue
%Vor%und dieser stammt von Sitecore 7: Sitecore.Pipelines.RenderField.GetTextFieldValue
%Vor%Sie können in der letzten Zeile des Codes auf Process-Methode von Sitecore 7 Ergebnis wird codiert angezeigt. Sie können eine eigene Klasse für den GetTextField-Prozessor erstellen und sie der RenderField-Pipeline hinzufügen, aber ich empfehle Ihnen, Ihr Feld von einzeiligem Text zu mehrzeiligem Text oder zu Memofeld zu ändern.
Ich habe die Sitecore.Pipelines.RenderField.GetMemoFieldValue-Klasse auf Sitecore 6.5 und 7 überprüft und die Implementierung ist dieselbe und das Ergebnis ist nicht codiert:
%Vor%Der Code für GetTextField wurde auf Sitecore 6.6 Update 3 aktualisiert. Sie können dies unter Versionsgeschichte :
Seiteneditor In 6.6 Update-3 wurde die Pipeline geändert HTML-Codierung des Feldwerts beim Rendern einzeiliger Textfelder (Ref. Nr. 327905). Dies hat im Seiteneditor nicht richtig funktioniert welcher den kodierten Wert angezeigt hat. Und wenn der Benutzer die Seite gespeichert hat, Bereits codierter Wert wäre wieder HTML-codiert. (384997)
Ich hoffe, es hilft.
Es scheint, dass viele Leute durch diesen Beitrag verwirrt worden sind und angefangen haben, mehr und mehr darum zu bitten, den oben erwähnten Fix zu bekommen.
Es scheint einen Fehler im FieldRenderer zu geben, der das Rendern von HTML-Tags verhindert Sitecore CMS codiert nicht HTML
Sitecore CMS hat den Feldwert beim Rendern von einzeiligen Text Feldern und Links Feldern vor Version 6.6 rev. 131111 (6.6 Update-3). Als Ergebnis dieses Problems besteht eine Seite, die Werte aus den Feldern Einzeiliger Text und Links ausgibt, nicht die W3C-Markup-Validierung.
Laut Sitecore CMS Release Notes wurde dieses Problem seit Sitecore CMS 6.6 rev. behoben. 131111 (aka Update-3)
Dann wurde es seit Sitecore CMS 6.6.0 rev verbessert. 130404 (aka Update-5)
Und seit CMS 6.6.0 rev. 130529 (aka Service Pack-1)
Ab Version 6.6 rev. 131111 (6.6 Update-3) und höher Sitecore CMS HTML codiert den Wert der Felder Single-Line Text und Links mit dem HttpUtility.HtmlEncode Methode.
Die Änderungen wurden sowohl im Prozessor GetTextValue als auch in der Klasse Sitecore.Xml.Xsl.LinkRenderer eingeführt.
%Vor%Sie können mit dem Support in Kontakt treten, sie kennen das Problem und habe eine Lösung verfügbar. Sie sollten nach Sitecore.Support.381846.dll fragen
Die Sitecore.Support.381846-Assembly hat den GetTextFieldValue -Prozessor geändert, wobei die folgende Codezeile fehlt.
%Vor%Diese "Korrektur" bringt nur das alte Verhalten für das Feld einzeiliger Text . Mit anderen Worten, es führt das alte Problem mit der Referenznummer # 327905 ein (siehe oben für Details).
Warum ist in meiner Sitecore-Lösung nach dem Upgrade auf Sitecore CMS 6.6 Update-3 und höher alles kaputt? Weil Sie das Feld einzeiliger Text falsch verwenden. Dieser Feldtyp soll kein HTML oder JavaScript speichern. Dies ist ein Inhaltsfeldtyp zum Speichern des Inhaltswerts. Wenn Sie HTML-Markup und JavaScript in Ihren Inhaltsfeldern speichern, bedeutet dies, dass Sie nicht der bewährten Vorgehensweise von Sitecore folgen.
Ich hoffe, dies hilft, um es klar zu machen.
Beste Wünsche, Oleg Burov
Sitecore CMS und DMS 7.2 rev. 141226 (aka 7.2 Update-3) hat die Einstellung Rendering.HtmlEncodedFieldTypes
in der Datei Web.config
eingeführt, die eine durch Pipes getrennte Liste von Feldtypen angibt, die beim Rendern durch die <renderField>
-Pipeline HTML-codiert werden sollen.
Jetzt können Sie steuern, welche Sitecore-Feldtypen HTML-codiert sein sollen oder nicht.
Beim Upgrade von Sitecore 6.5 auf 7.0 hatten wir das gleiche Problem. Es scheint einen Fehler im FieldRenderer zu geben, der das Rendern von HTML-Tags verhindert. Sie können Kontakt mit dem Support aufnehmen, sie kennen das Problem und haben eine Lösung verfügbar.
Sie sollten nach Sitecore.Support.381846.dll fragen, das wie folgt integriert werden muss:
Ersetzen Sie diese Zeile in web.config
%Vor%Mit diesem
%Vor%Hoffe, das hilft.
Wir hatten dieses Problem und haben diesen Beitrag gefunden. Wir haben uns entschieden, damit umzugehen, indem wir direkt zur Datenbank gehen und die einzelnen Textfelder mit nbsp und amp aktualisieren, wo unsere primären Problembereiche sind, die Schritte können für jedes codierte Zeichen, das Sie bearbeiten, wiederholt werden. Wir haben uns entschieden, die Linkfelder manuell zu bearbeiten.
Wenn Sie die Ersetzung sowohl im Master als auch im Web ausführen, können Sie eine erneute Veröffentlichung der Felder auslassen.
Grüße Jan
SELECT TOP 18000 * VON [uat_Sitecore_master_new]. [dbo]. [VersionedFields] wo (Wert wie '% & amp;%;%') und FieldId in (SELECT ItemId FROM SharedFields, wobei Wert wie 'Single-Line Text') --und FieldId in (SELECT ItemId FROM SharedFields, wobei Value wie 'General Link')
/ * FINDEN ALLE EINZELNEN TEXTFELDER MIT NBSP / SELECT Ersetzen (Wert, '', ''), VON [uat_Sitecore_master_new]. [Dbo]. [VersionedFields] wo (Wert wie '%%') und FieldId in (SELECT ItemId FROM SharedFields, wo Wert wie 'Single-Line Text')
/ * ERSETZEN VON NBSP IN einzeiligen Textfeldern * / UPDATE [uat_Sitecore_master_new]. [Dbo]. [VersionedFields] SET Wert = Ersetzen (Wert, '', '') wo (Wert wie '%%') und FieldId in (SELECT ItemId FROM SharedFields, wo Wert wie 'Single-Line Text')
UPDATE [uat_Sitecore_web_neu]. [dbo]. [VersionedFields] SET Wert = Ersetzen (Wert, '', '') wo (Wert wie '%%') und FieldId in (SELECT ItemId FROM SharedFields, wo Wert wie 'Single-Line Text')
/ * FINDEN ALLE EINZELNEN TEXTFELDER MIT AMP /
SELECT Ersetzen (Wert, '& amp;', '& amp;'), FROM [uat_Sitecore_master_new]. [Dbo]. [VersionedFields] wo (Wert wie '% & amp;%')
und FieldId in (SELECT ItemId FROM SharedFields, wo Wert wie 'Single-Line Text')
/ * ERSETZEN SIE AMP IN einzeiligen Textfeldern * /
UPDATE [uat_Sitecore_master_new]. [Dbo]. [VersionedFields] SET Wert = Ersetzen (Wert, '& am;', '& am;') wo (Wert wie '% & amp;%')
und FieldId in (SELECT ItemId FROM SharedFields, wo Wert wie 'Single-Line Text')
UPDATE [uat_Sitecore_web_neu]. [dbo]. [VersionedFields] SET Wert = Ersetzen (Wert, '& amp;', '& amp;') wo (Wert wie '% & amp;%') und FieldId in (SELECT ItemId FROM SharedFields, wo Wert wie 'Single-Line Text')
/ * FINDEN ALLE EINZELNEN TEXTFELDER MIT '' /
SELECT Ersetzen (Wert, '' ',' '' '), VON [uat_Sitecore_master_new]. [Dbo]. [VersionsFields] wo (Wert wie'% '%')
und FieldId in (SELECT ItemId FROM SharedFields, wo Wert wie 'Single-Line Text')
/ * REPLACE '' in einzeiligen Textfeldern * /
UPDATE [uat_Sitecore_master_new]. [Dbo]. [VersionedFields] SET Wert = Ersetzen (Wert, '' ',' '' ') wo (Wert wie'% '%')
und FieldId in (SELECT ItemId FROM SharedFields, wo Wert wie 'Single-Line Text')
UPDATE [uat_Sitecore_web_new]. [dbo]. [VersionedFields] SET Wert = Ersetzen (Wert, '' ',' '' ') wo (Wert wie'% '%') und FieldId in (SELECT ItemId FROM SharedFields, wo Wert wie 'Single-Line Text')
/ * FINDEN SIE ALLE EINZELNEN TEXTFELDER MIT "" /
SELECT Ersetzen (Wert, '' ',' '' '), VON [uat_Sitecore_master_new]. [Dbo]. [VersionedFields] wo (Wert wie'% "%)
und FieldId in (SELECT ItemId FROM SharedFields, wo Wert wie 'Single-Line Text')
/ * REPLACE "" in einzeiligen Textfeldern * /
UPDATE [uat_Sitecore_master_new]. [Dbo]. [VersionedFields] SET Wert = Ersetzen (Wert, '' ',' '') wo (Wert wie '% "%')
und FieldId in (SELECT ItemId FROM SharedFields, wo Wert wie 'Single-Line Text')
UPDATE [uat_Sitecore_web_new]. [dbo]. [VersionedFields] SET Wert = Ersetzen (Wert, '' ',' '') wo (Wert wie '% "%') und FieldId in (SELECT ItemId FROM SharedFields, wo Wert wie 'Single-Line Text')