Stress mit umlauten

Der liebe Sharepoint Designer ist ja ein ganz brauchbares Programm zur Verwaltung von lokalen Webseiten. In diesem Bereich Backstage habe ich ja verschiedene Skripte und Lösungen damit beschrieben. Aber eine Sache nehme ich dem SPD richtig übel. Manchmal passiert es, dass er mir aus HTML-Sicht besondere Zeichen kaputt macht. Zuerst waren es "graue Quadrate" und erst wenn ich die Datei in einem ganz anderen Texteditor mit HEX-Ansicht geöffnet hatte, war das ziemlich fremde UNICODE-Zeichen zu erahnen. Jedes Ersetzen schlug aber erst mal in SPD fehlt, da SPD das Zeichen als "Leerzeichen" interpretierte.

CharSet als META-Tag

Irgendwann habe ich dann wohl den "META-TAG" für den Charset auf dem Header entfernt, weil Google Pagerank das als unschön angekreidet hat. Schließlich hilft es nicht wirklich in der Datei selbst den Zeichensatz vorzugeben. Der Renderer muss die Datei ja schon "verstanden" haben und dann braucht man die Anweisung auch nicht mehr. Aber aus Sicht von Sharepoint Designer macht es das noch schlimmer. denn nun wurden fast alle Sonderzeichen beim Editieren einer Seite "kaputt"

Und auf eine gezielte Suche im Internet bin ich wohl nicht allein.

Und auch im Internet finden sich diverse Treffer und Hinweise auf eine Lösung. Sagen wir besser "Workaround", denn eigentlich sollte ein Editor nie Informationen einfach verändern.

Setup in Sharepoint Designer

Also um allen unwägbarkeiten mal aus dem Weg zu gehen habe ich die Standard Zeichensatzeinstellung des Webs erst mal kontrolliert:

Hier stand also schon länger "UTF-8". Das der eigentliche Standard ist, kann ich gar nicht mehr sagen. Aber ich bislang schon immer "Umlaute" als umlaut im Code eingeben konnte und so als Datei gespeichert wurden, kann ja das schon mal nicht so falsch gewesen sein.

Zur Sicherheit habe ich dann aber auch noch mal über meine DWT-Vorlage ein Meta-Tag addiert:

Wobei man hier drauf achten sollte, dass dieser Tag möglichst direkt nach dem "<head>" steht, damit der Browser möglichst früh die Seite mit dem richtigen Zeichensatz interpretiert.

Und dann habe ich noch mal schnell mit Fiddler einen Abruf der Homepage angeschaut:

Der Webserver des Hosters der msxfaq.de scheint hier also keinen Charset mit vorzugeben. Schaut man sich mal den Header von www.heise.de hier an, dann wird da schon im Header ein Charset mitgeliefert.

Ich kann also zusätzlich noch mal schauen, ob ich per Apache-Direktive vielleicht hier schon ein Charset mitgeben kann. Beim Apache ist das wohl eine Direktive in der "httpd.conf".

AddDefaultCharset utf-8

Eventuell hilft auch eine Eintrag in der ".htaccess".

IndexOptions +Charset=UTF-8

Allerdings ändert das nichts am Verhalten von Sharepoint Designer, der zumindest bei mir ja lokal über ein "Disk-Web" arbeitet, also lokale UNC-Pfade ganz ohne Webserver nutzt. Interessant, wenn man mal verschiedene Webserver betrachtet:

Bereinigung und Nachwirkungen

Dieses Fehlverhalten hat mich natürlich etwas zurück geworfen. Sofern ein "&#65533" als Zeichen ersetzt wurde, konnte ich viele Änderungen manuell per "Suchen ersetzen" wieder zurück drehen. Aus einem "f&#65533r" wird dann ein "für" und aus "&#65533nderungen" eben ein Änderungen . So habe ich ca.30% aller defekten Zeichen durch wenige "Search/Replace"-Aktionen geheilt. Aber es sind immer noch ca. 1000 defekte Zeichen in 59 Seiten vorhanden. Die werden ich wohl so nach und nach rauswerfen.

Insgesamt hat es mich aber schon ein par Stunden über Pfingsten 2015 gekostet, die Ursache (hoffentlich) gefunden zu haben.

Absicherung

Ich kann dennoch nicht sicher sein, dass dies bei der aktuellen Nutzung auch zukünftig nicht wieder passiert. Daher werde ich mittelfristig dafür sorgen, dass es keine UTF-8 Zeichen mehr gibt, sondern die entsprechenden Zeichen einfach durch die HTML-Platzhalter ersetzt werden. Zumal selbst mit UTF-8 z.B. das EURO-Zeichen in einem "<p>" Abschnitt korrekt wiedergegeben wird, aber in einem "<pre>"-Abschnitt gar nicht eingegeben werden kann. Also etwa in der der Art:

Function umlaut(Strsource As String) As String
    Strsource = Replace(Strsource, " ", "&nbsp;") '   erzwungenes Leerzeichen &nbsp;
    Strsource = Replace(Strsource, "ä", "&auml;") ' Ä A-Umlaut &Auml;
    Strsource = Replace(Strsource, "ö", "&ouml;") ' ö o-Umlaut
    Strsource = Replace(Strsource, "ü", "&uuml;") ' ü u-Umlaut ;
    Strsource = Replace(Strsource, "Ä", "&Auml;")
    Strsource = Replace(Strsource, "Ö", "&Ouml;") ' Ö o-Umlaut &Ouml;
    Strsource = Replace(Strsource, "Ü", "&Uuml;") ' Ü u-Umlaut
    Strsource = Replace(Strsource, "ß", "&szlig;") ' ß scharfes S
    ' " Anführungszeichen &quot;
    ' « doppelte Anführungszeichen links &laquo;
    ' » doppelte Anführungzeichen rechts &raquo;
    ' < kleiner als &lt;
    ' > größer als &gt;
    ' © Copyright &copy;
    ' ® registriertes Warenzeichent &reg;
    ' € Euro-Zeichen &#8364;
    ' £ Pfund-Zeichen &pound;
    ' § Paragraph-Zeichen &sect;

End Function

Diese Funktion werde ich einfach in meine "Pagework"-Funktion einbauen um im Source-Code alle solche Vorkommen entsprechend zu ersetzen. Sicher ist sicher und selbst wenn die HTML-Datei dann als UTF-8 korrekt ausgeliefert wird, funktioniert es dennoch und hoffentlich kommt mein Sharepoint Designer damit nicht mehr durcheinander.

Weitere Links