DotNetNuke 4.5.3 Core Hack – Und die Suche wird Deutsch

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.


 


 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.