Laden...

Austauch von Kritischen Zeichen in einem String...

Erstellt von vosselr vor 16 Jahren Letzter Beitrag vor 16 Jahren 6.716 Views
V
vosselr Themenstarter:in
4 Beiträge seit 2007
vor 16 Jahren
Austauch von Kritischen Zeichen in einem String...

Beschreibung:

Diese Klasse tauscht Umlaute und andere kritische Zeichen in die entsprechenden Entitäten (HTML/XLM - save) aus.
Man kann Diese Kalsse natürlich für beliebige Austauschoperationen nutzen ...

//Folgende Using Statements müssen sein :-)
using System;
using System.Collections.Generic;
using System.Text;

/// <summary>
    /// Klasse zur Bereinigung von Strings
    /// Kritische Chars werden gegen die entsprechende Entität ausgetauscht
    /// </summary>
class HTMLCharacterConverter
    {
        private Dictionary<char, string> criticals = new Dictionary<char, string>();

        public HTMLCharacterConverter()
        {
            criticals.Add(''"'', "&quot;");
            criticals.Add(''>'', "&lt;");
            criticals.Add(''<'', "&gt;");
            criticals.Add(''¡'', "&iexcl;");
            criticals.Add(''¢'', "&cent;");
            criticals.Add(''£'', "&pound;");
            criticals.Add(''¤'', "&curren;");
            criticals.Add(''¥'', "&yen;");
            criticals.Add(''¦'', "&brvbar;");
            criticals.Add(''§'', "&sect;");
            criticals.Add(''¨'', "&uml;");
            criticals.Add(''©'', "&copy;");
            criticals.Add(''ª'', "&ordf;");
            criticals.Add(''«'', "&laquo;");
            criticals.Add(''¬'', "&not;");
            criticals.Add('' '', "&shy;");
            criticals.Add(''®'', "&reg;");
            criticals.Add(''¯'', "&macr;");
            criticals.Add(''°'', "&deg;");
            criticals.Add(''±'', "&plusmn;");
            criticals.Add(''²'', "&sup2;");
            criticals.Add(''³'', "&sup3;");
            criticals.Add(''´'', "&acute;");
            criticals.Add(''µ'', "&micro;");
            criticals.Add(''¶'', "&para;");
            criticals.Add(''·'', "&middot;");
            criticals.Add(''¸'', "&cedil;");
            criticals.Add(''¹'', "&sup1;");
            criticals.Add(''º'', "&ordm;");
            criticals.Add(''»'', "&raquo;");
            criticals.Add(''¼'', "&frac14;");
            criticals.Add(''½'', "&frac12;");
            criticals.Add(''¾'', "&frac34;");
            criticals.Add(''¿'', "&iquest;");
            criticals.Add(''À'', "&Agrave;");
            criticals.Add(''Á'', "&Aacute;");
            criticals.Add(''Â'', "&Acirc;");
            criticals.Add(''Ã'', "&Atilde;");
            criticals.Add(''Ä'', "&Auml;");
            criticals.Add(''Å'', "&Aring;");
            criticals.Add(''Æ'', "&AElig;");
            criticals.Add(''Ç'', "&Ccedil;");
            criticals.Add(''È'', "&Egrave;");
            criticals.Add(''É'', "&Eacute;");
            criticals.Add(''Ê'', "&Ecirc;");
            criticals.Add(''Ë'', "&Euml;");
            criticals.Add(''Ì'', "&Igrave;");
            criticals.Add(''Í'', "&Iacute;");
            criticals.Add(''Î'', "&Icirc;");
            criticals.Add(''Ï'', "&Iuml;");
            criticals.Add(''Ð'', "&ETH;");
            criticals.Add(''Ñ'', "&Ntilde;");
            criticals.Add(''Ò'', "&Ograve;");
            criticals.Add(''Ó'', "&Oacute;");
            criticals.Add(''Ô'', "&Ocirc;");
            criticals.Add(''Õ'', "&Otilde;");
            criticals.Add(''Ö'', "&Ouml;");
            criticals.Add(''×'', "&times;");
            criticals.Add(''Ø'', "&Oslash;");
            criticals.Add(''Ù'', "&Ugrave;");
            criticals.Add(''Ú'', "&Uacute;");
            criticals.Add(''Û'', "&Ucirc;");
            criticals.Add(''Ü'', "&Uuml;");
            criticals.Add(''Ý'', "&Yacute;");
            criticals.Add(''Þ'', "&THORN;");
            criticals.Add(''ß'', "&szlig;");
            criticals.Add(''à'', "&agrave;");
            criticals.Add(''á'', "&aacute;");
            criticals.Add(''â'', "&acirc;");
            criticals.Add(''ã'', "&atilde;");
            criticals.Add(''ä'', "&auml;");
            criticals.Add(''å'', "&aring;");
            criticals.Add(''æ'', "&aelig;");
            criticals.Add(''ç'', "&ccedil;");
            criticals.Add(''è'', "&egrave;");
            criticals.Add(''é'', "&eacute;");
            criticals.Add(''ê'', "&ecirc;");
            criticals.Add(''ë'', "&euml;");
            criticals.Add(''ì'', "&igrave;");
            criticals.Add(''í'', "&iacute;");
            criticals.Add(''î'', "&icirc;");
            criticals.Add(''ï'', "&iuml;");
            criticals.Add('' '', "&eth;");
            criticals.Add(''ñ'', "&ntilde;");
            criticals.Add(''ò'', "&ograve;");
            criticals.Add(''ó'', "&oacute;");
            criticals.Add(''ô'', "&ocirc;");
            criticals.Add(''õ'', "&otilde;");
            criticals.Add(''ö'', "&ouml;");
            criticals.Add(''÷'', "&divide;");
            criticals.Add(''ø'', "&oslash;");
            criticals.Add(''ù'', "&ugrave;");
            criticals.Add(''ú'', "&uacute;");
            criticals.Add(''û'', "&ucirc;");
            criticals.Add(''ü'', "&uuml;");
            criticals.Add(''ý'', "&yacute;");
            criticals.Add(''þ'', "&thorn;");
            criticals.Add(''ÿ'', "&yuml;");
        }

        /**
         * Bereinigt einen übergebene String und tauscht die kritischen
         * Zeichen aus.
         */
        public String Purge(String text)
        {
            StringBuilder htmlk = new StringBuilder();
            int ia = 0;
            for (int i = 0; i < text.Length; i++)
            {
                Char c = text[i];
                if (criticals.ContainsKey(c))
                {
                    htmlk.Append(text.Substring(ia, i-ia));
                    htmlk.Append(criticals[c]);
                    ia = i + 1;
                }
            }
            htmlk.Append(text.Substring(ia));
            return htmlk.ToString();
        }
    }

Schlagwörter: Umlaut, Umlaute, Entität, String, HTML, XML

Quelle: .NET-Snippets

R
122 Beiträge seit 2007
vor 16 Jahren

Hallo vosslr,
ich habe einige Probleme, die kritischen Zeichen beim Füllen des Dictionarys zu coden. Die doppelten '' will der Compiler nicht. Ich habe diese nun jeweils durch ein einfaches ' ersetzt. Weiterhin wird ein Blank anscheinend doppelt versucht einzufügen: ('' '', "&shy;") und ('' '', "&eth;").

Kann es sein, dass es hier im Forum Probleme mit der Zeichencodierung für geposteten Programmcode gibt? Eventuell könntest du den Code als Datei hier einfügen.

2.891 Beiträge seit 2004
vor 16 Jahren

Und warum benutze ich nicht einfach System.Web.HttpUtility.HtmlEncode(string)? Weil die Unicode-Entitäten benutzt?

Gruß
dN!3L

52 Beiträge seit 2007
vor 16 Jahren
@

benutze halt den Klammeraffen vor einem String.

yb~~~~~~~~~~~~

L
333 Beiträge seit 2007
vor 16 Jahren

Falls es den Autor der Klasse noch interessiert: Das &-Zeichen sollte man möglichst auch austauschen. 😉 Und zwar, damit es nicht alle anderen Entities mit ersetzt, als allererste Operation, also vor allen anderen Ersetzungen. & wird in HTML/XML durch &amp; ersetzt.

Ansonsten sei erwähnt, dass diese Entities (abgesehen von den Sonderzeichen & < > und unter bestimmten Umständen auch ") nicht benötigt werden, wenn man in der HTML-/XML-Datei eine korrekte Angabe zum verwendeten Zeichensatz macht. Dafür gibt es sowas schließlich. Und wenn man UTF-8 als Zeichensatz verwendet und sich dann auch noch dran hält, kann man alle Zeichen der Welt ohne jede Umschreibung verwenden. Ich denke, diese Welt ist bereit für Unicode. 🙂

Und übrigens: So Entities wie &auml; sind in HTML definiert - nicht aber in XML in seiner Rohform. XML-Dateien, die sowas enthalten, werden einem vom Parser i.d.R. gleich um die Ohren geworfen! (Außer man schreibt sich eine passende DTD...)