Nachdem ich mein eigenes Portal (das wo Ihr gerade drauf seid) auf die aktuelle Version 4.5.3 von DotNetNuke aktualisiert habe und mich auch ein wenig über den wesentlich besseren Editor FCK gefreut habe, wurde meine Freude aber doch schnell wieder getrübt.
Meine „alten“ Beiträge wurden in der Suche und im Modul WhatsNew einwandfrei mit den Umlauten angezeigt und auch die Suchfunktion hat bei den Umlauten wunderbar funktioniert. Meine neuen Beiträge aber wurden alle verstümmelt dargestellt (In der Suche und in der Anzeige des Moduls WhatsNew).
Was war geschehen?
Ich habe ein wenig in den Datenbanken recherchiert und stellte fest, dass der FTB Editor der in der 3er Version von DotNetNuke als Standard eingesetzt war, die Umlaute anders kodiert hat wie dies der FCK Editor macht. Das sollte generell eigentlich auch kein Problem sein, aber das Problem war nachdem ich soweit gekommen war relativ schnell gefunden.
Beim indizieren der Inhalte werden alle zu indizierenden Texte durch eine Funktion mit dem Namen StripEntities geschickt um HTML Fragment die und ähnliche Zeichen zu entfernen. Leider wird hierbei ein Regex Filter eingesetzt der auch Zeichen wie ö oder Ü aus dem Text entfernt. Und genau hier liegt das Problem, durch die Funktion StripEntities werden die in HTML kodierten Umlaute aus den Texten entfernt. Aber dies ist kein wirklich großes Problem, nachfolgend zeige ich wie die Funktion im Original aussieht und welche Änderung man machen muss, damit die Umlaute nicht herausgefiltert werden.
Hier der Original Code:
Public Shared Function StripEntities(ByVal HTML As String, ByVal RetainSpace As Boolean) As String
‚Set up Replacement String
Dim RepString As String
If RetainSpace Then
RepString = “ „
Else
RepString = „“
End If
‚Replace Entities by replacement String and return mofified string
Return System.Text.RegularExpressions.Regex.Replace(HTML, „&[^;]*;“, RepString)
End Function
Und hier der Code nach der Änderung:
Public Shared Function StripEntities(ByVal HTML As String, ByVal RetainSpace As Boolean) As String
‚Set up Replacement String
Dim RepString As String
If RetainSpace Then
RepString = “ „
Else
RepString = „“
End If
‚Replace Entities by replacement String and return mofified string
Return System.Text.RegularExpressions.Regex.Replace(HTML, „&[^uml;]*;“, RepString)
End Function
Und wer keine Lust hat diese Änderung selbst zu machen, kann auch einfach dem nachfogeldenden Link folgen und die DotNetNuke.DLL einfach herunterladen. Es handelt sich dabei um die Version 4.5.3. Einfach runterladen in das BIN Verzeichnis der DotNetNuke Installation kopieren und fertig.
Hier gibt es die kompilierte Version der DotNetNuke 4.5.3 DLL
Fast fertig, denn die „falschen“ Einträge sind bereits in der Datenbank vorhanden und müssen erst noch einmal erstellt werden..
Dies geht folgendermaßen:
Also als Host einloggen.
Im Menü Host den Menüpunkt SQL aufrufen und das folgende Script in das SQL Fenster kopieren.
———- START Script———–
delete SearchItem
go
delete SearchWord
go
delete SearchItemWord
go
delete SearchItemWordPosition
go
———END Script————-
run as script anklicken
und den Link ausführen betätigen.
Entweder kann man jetzt warten, bis der nächste Schedule Aufruf der Suchindex erstellung läuft, oder wenn man es eilig hat (wer hat das nicht) Im Host Menü den Menüpinkt Search Amdin aufrufen und Re-Index Content anklicken.