asphelper.de - Tipps & Skripts - HTMLDecode

Link: Wichtiger Hinweis in eigener Sache!


 Autor: Klaus Keller Erstellt am: 2005-05-31 Aufrufe: 9458 


 << Vorheriger Tipp Nächster Tipp >>



Tipp 79: HTMLDecode



Per Server.HTMLEncode kann man einige Zeichen in einem String kodieren, so wird aus einem > ein &gt; Problematisch bei dem ganzen ist allerdings, daß es keine Decode-Funktion in ASP existiert. Damit hilft bei entsprechendem Bedarf nur eine "Eigengestrickte" Funktion. Allerdings ist das ganze nicht so einfach. ASP ist nun mal lange nicht so schnell wie kompiliertes C++, damit muss man bei den Funktionen vorsichtig sein. Natürlich kann man umfangreiche Funktionen verwenden, leider wird die Geschwindigkeit dadurch teils deutlich beeinträchtigt.

Nachfolgend werden Ihnen mehrere Decode-Funktionen vorgestellt. Diese unterscheiden sich in der Menge an zu dekodierenden Zeichen und damit natürlich auch in der Geschwindigkeit. Zuerst einmal eine sehr einfache Funktion:
1   
2
3
4
5
6
7
Function HtmlDecode(ByVal sText)
    'sText = Replace(sText,"<br>", vbcrlf)
    'sText = Replace(sText,"<br />", vbcrlf)
    sText = Replace(sText,"&lt;", "<")
    sText = Replace(sText,"&gt;", ">")
    HtmlDecode = sText
End Function


Diese Funktion setzt nur die Pfeile in HTML-Code um. Die zweite und dritte Zeile wurde deaktiviert, da dies nicht immer gewünscht ist. Oftmals ist es jedoch gewünscht, daß die Zeilenumbrüche z.B. in einem Textarea in HTML - Zeilenumbrüche umgesetzt werden. Dann müssen Sie die zweite und die dritte Zeile wieder aktivieren.

Die nächste Funktion kodiert mehr Zeichen, auch dabei werden nur einfache Replace-Anweisungen verwendet. Dennoch ist der Aufwand dabei für die CPU vor allem bei sehr viel Text aufwendiger:
1   
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Function HtmlDecode(ByVal sText)
    'sText = Replace(sText, "<br>", vbcrlf)
    'sText = Replace(sText, "<br />", vbcrlf)
    sText = Replace(sText, "&lt;", "<")
    sText = Replace(sText, "&gt;", ">")
    sText = Replace(sText, "&auml;", "ä")
    sText = Replace(sText, "&ouml;", "ö")
    sText = Replace(sText, "&uuml;", "ü")
    sText = Replace(sText, "&Auml;", "Ä")
    sText = Replace(sText, "&Ouml;", "Ö")
    sText = Replace(sText, "&Uuml;", "Ü")
    sText = Replace(sText, "&szlig;", "ß")
    sText = Replace(sText, "&8364;", "€")
    sText = Replace(sText, "&euro;", "€")
    sText = Replace(sText, "&quot;", """")
    sText = Replace(sText, "&dollar;", "$")
    sText = Replace(sText, "&amp;", "&")
    sText = Replace(sText, "&apos;", "'")
    sText = Replace(sText, "&quot;", """")
    sText = Replace(sText, "&nbsp;", " ")
    sText = Replace(sText, "&bsp;", " ")

    HtmlDecode = sText
End Function


Die dritte Funktion ist aufwendiger, es setzt das Regular-Expression Objekt ein, damit werden alle HTML-kodierte Zeichen wieder dekodiert, die mit der ANSI/Unicode ZeichenID kodiert wurden. So wird z.B. aus &#8364; wieder das Eurozeichen.
1   
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public function HtmlDecode(ByVal sText)
    Dim objRegExp, objMatchCol, objMatch, tmp
    
    Set objRegExp = Server.CreateObject("VBScript.RegExp")
    objRegExp.Pattern = "&#[0-9]{1,4};"
    objRegExp.Global = True
    Set objMatchCol = objRegExp.Execute(sText)
    For Each objMatch In objMatchCol
        tmp = left(objMatch.Value, len(objMatch.Value)-1)
        tmp = chrw(right(tmp,len(tmp)-2))
        sText = Replace(sText, objMatch.Value, tmp)
    Next
    Set objRegExp = nothing
    HtmlDecode = sText
end function


Natürlich kann man die erste und die dritte Funktion kombinieren, das sähe so aus:
1   
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public function HtmlDecode(ByVal sText)
    Dim objRegExp, objMatchCol, objMatch, tmp
    
    Set objRegExp = Server.CreateObject("VBScript.RegExp")
    objRegExp.Pattern = "&#[0-9]{1,4};"
    objRegExp.Global = True
    Set objMatchCol = objRegExp.Execute(sText)
    For Each objMatch In objMatchCol
        tmp = left(objMatch.Value, len(objMatch.Value)-1)
        tmp = chrw(right(tmp,len(tmp)-2))
        sText = Replace(sText, objMatch.Value, tmp)
    Next
    Set objRegExp = nothing

    'sText = Replace(sText, "<br>", vbcrlf)
    'sText = Replace(sText, "<br />", vbcrlf)
    sText = Replace(sText, "&lt;", "<")
    sText = Replace(sText, "&gt;", ">")
    sText = Replace(sText, "&auml;", "ä")
    sText = Replace(sText, "&ouml;", "ö")
    sText = Replace(sText, "&uuml;", "ü")
    sText = Replace(sText, "&Auml;", "Ä")
    sText = Replace(sText, "&Ouml;", "Ö")
    sText = Replace(sText, "&Uuml;", "Ü")
    sText = Replace(sText, "&szlig;", "ß")
    sText = Replace(sText, "&euro;", "€")
    sText = Replace(sText, "&quot;", """")
    sText = Replace(sText, "&dollar;", "$")
    sText = Replace(sText, "&amp;", "&")
    sText = Replace(sText, "&apos;", "'")
    sText = Replace(sText, "&quot;", """")
    sText = Replace(sText, "&nbsp;", " ")
    sText = Replace(sText, "&bsp;", " ")

    HtmlDecode = sText
end function

Das ist die umfangreichste Funktion und damit auch jene, die am meisten Aufwand für den Prozessor bedeutet. Falls nur wenig Text dekodiert werden muss ist der Aufwand im geringen Bereich. Sobald diese Funktion jedoch für viel Text verwendet wird oder in eine stark frequentierte Seite eingebaut wird, muß geprüft werden ob eine einfache Dekodierung geeigneter ist.



 << Zum vorherigen Tipp 78:
Performance-Messung mit WAS (Web Application Stress-Tool)

 Zum nächsten Tipp 80 >>
Excel-Datei ohne Excel am Server erzeugen

top top
© Copyright By Klaus Keller, 2001-2008 - Alle Rechte vorbehalten.