Link: Wichtiger Hinweis in eigener Sache!
| Autor: Klaus Keller | Erstellt am: 2005-05-31 | Aufrufe: 9458 |
Tipp 79: HTMLDecode
Per Server.HTMLEncode kann man einige Zeichen in einem String kodieren, so wird aus einem > ein > 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,"<", "<") sText = Replace(sText,">", ">") 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, "<", "<") sText = Replace(sText, ">", ">") sText = Replace(sText, "ä", "ä") sText = Replace(sText, "ö", "ö") sText = Replace(sText, "ü", "ü") sText = Replace(sText, "Ä", "Ä") sText = Replace(sText, "Ö", "Ö") sText = Replace(sText, "Ü", "Ü") sText = Replace(sText, "ß", "ß") sText = Replace(sText, "&8364;", "€") sText = Replace(sText, "€", "€") sText = Replace(sText, """, """") sText = Replace(sText, "$", "$") sText = Replace(sText, "&", "&") sText = Replace(sText, "'", "'") sText = Replace(sText, """, """") sText = Replace(sText, " ", " ") 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 € 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, "<", "<") sText = Replace(sText, ">", ">") sText = Replace(sText, "ä", "ä") sText = Replace(sText, "ö", "ö") sText = Replace(sText, "ü", "ü") sText = Replace(sText, "Ä", "Ä") sText = Replace(sText, "Ö", "Ö") sText = Replace(sText, "Ü", "Ü") sText = Replace(sText, "ß", "ß") sText = Replace(sText, "€", "€") sText = Replace(sText, """, """") sText = Replace(sText, "$", "$") sText = Replace(sText, "&", "&") sText = Replace(sText, "'", "'") sText = Replace(sText, """, """") sText = Replace(sText, " ", " ") 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.
|