Problem mit Funktion zum HTML entfernen

multimolti

Erfahrenes Mitglied
Hallo!

Ich habe ein Problem mit meiner StripHTML-Funktion. Die hat bisher immer wunderbar funktioniert, aber jetzt bin ich leider auf ein Problem gestoßen: Sie verwendet immer das erste ">" was auftaucht als Tag-Ende, und ignoriert dabei die Tatsache, dass das ">" auch innerhalb eines Strings für JavaScript stehen kann.

Beispielsweise hier passiert der Fehler:
HTML:
<a style="white-space: nowrap; font-size: 10px; margin-right: 2px;" href="wort-erg.htm" onmouseout="UnTip();" onmouseover="Tip('- ältere physikal. Energieeinheit<br />- Bez. für Sandwüsten in der Sahara ', TITLE, 'Wortinfo ERG');">
Das <br /> im JS-Tooltip killt meine Funktion und lässt damit mein ganzes Programm falsch arbeiten.

Hier der Code der Funktion
C#:
        private string stripHTML(string str)
        {
            try
            {
                int start = 0;
                int end = 0;
                int count = 0;

                while (((str.IndexOf("<") > -1) && (str.IndexOf(">") > -1) && (str.IndexOf("<") < str.IndexOf(">"))))
                {
                    start = str.IndexOf("<");
                    end = str.IndexOf(">");
                    count = end - start + 1;

                    str = str.Remove(start, count);
                }

                str = str.Replace(" ", " ");
                str = str.Replace(">", "");
                str = str.Replace("\r\n", "");

                return str.Trim();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
Die Funktion habe ich im Internet gefunden und ziemlich exakt übernommen, aber auch all die anderen Funktionen mit RegEx, die man noch so findet, haben das gleiche Problem.
Ich brauche dringend eine Lösung, bitte helft mir!

Vielen Dank.
 
Dass das syntaktisch nicht erlaubt ist glaube ich dir, aber die Website, von der ich den Quelltext beziehe, tut es trotzdem.

Habe das Problem jetzt (sehr unprofessionell) gelöst, indem ich das so gemacht habe:
C#:
                while (((str.IndexOf("<") > -1) && (str.IndexOf(">") > -1) && (str.IndexOf("<") < str.IndexOf(">"))))
                {
                    start = str.IndexOf("<");
                    end = str.IndexOf(">");
                    count = end - start + 1;

                    secondtag = str.IndexOf("<", start + 1, count - 1);
                    if (secondtag > -1)
                    {
                        newend = str.IndexOf(">", secondtag + 7);
                        count = newend - start;
                    }

                    str = str.Remove(start, count);
                }
Habe keine Lust jetzt zu viel Aufwand zu treiben um eine schönere Methode zu entwickeln, das hier klappt für den Fall dass HTML im JS-String drin ist.

Das mit end=str.LastIndexOf(">") ist keine gute Idee, da er dann ja wirklich das letzte ">" im gesamten Quelltext nehmen würde, also prinzipiell alles zwischen "<html>" und "</html>" löscht.
 
Das mit end=str.LastIndexOf(">") ist keine gute Idee, da er dann ja wirklich das letzte ">" im gesamten Quelltext nehmen würde, also prinzipiell alles zwischen "<html>" und "</html>" löscht.

Ja, stimmt; ich hatte nicht bedacht das du ja den gesamten Code einer Seite ausliest.

codeman
 

Neue Beiträge

Zurück