返回首页

简介
这个函数是一个主要的区别在传统的ASP Server.HTMLEncode方法的替代品... ...它接受空字符串而不引发错误!
方effectnbsp;是VBScript的HTML编码。背景
我写这篇克服共同ISNULL,IsNothing的IsEmpty字符串的噩梦经历了从传统的ASP Server.HTMLEncode当调用。使用代码

Function HTMLEncode(ByVal sVal)



    sReturn = ""



    If ((TypeName(sVal)="String") And (Not IsNull(sVal)) And (sVal<>"")) Then

    

        For i = 1 To Len(sVal)

        

            ch = Mid(sVal, i, 1)



            Set oRE = New RegExp : oRE.Pattern = "[ a-zA-Z0-9]"



            If (Not oRE.Test(ch)) Then

                ch = "&#" & Asc(ch) & ";"

            End If



            sReturn = sReturn & ch

            

            Set oRE = Nothing

        Next

    End If

    

    HTMLEncode = sReturn

End Function
历史第四年2月,2009年:战后初期|戴夫Kreskowiak

回答

评论会员:约翰多尔蒂: 时间:2011/12/28
。马克纤毛Vincenti
评论会员:游客 时间:2011/12/28
通过不使用AscW会,你是不正确编码的Unicode字符。?例如,正确的编码字符"&#8230;,而不是放大器;#133;此外,正如人们所说的之前,你是不是对特殊字符进行编码(GT,LT;和AMP)和编码的其他ASCII字符的数目,这只是不需要进行编码(如%,*,!等)修改日(星期一),2009年10月12日,日11:20AM
mcnd
评论会员:游客 时间:2011/12/28
喜约翰​​真的很高兴看到有人仍在使用VBScript/ASP。但...codepreIf((TypeName(sVal)=spanclass="code-string""/spanspanclass="code-string"String"/span)And(NotIsNull(sVal))And(sVal<>spanclass="code-string""/spanspanclass="code-string""/span))Then/pre/code尽可能VBScript不较短的评估条件,SVAL从不同的空字符串比较就会使代码失败一个简单的实施将codepreFunctionHTMLEncode(ByValdata) IfTypeName(data)=spanclass="code-string""/spanspanclass="code-string"String"/spanThen HTMLEncode=Server.HTMLEncode(data) Else HTMLEncode=spanclass="code-string""/spanspanclass="code-string""/span EndIfEndFunction/pre/code如果出于某种原因,如使用类的ASP服务器,你不Server.HTMLEncode访问,这是一个更有效的实现codepreFunctionHTMLEncode(ByValdata) HTMLEncode=spanclass="code-string""/spanspanclass="code-string""/span IfTypeName(data)=spanclass="code-string""/spanspanclass="code-string"String"/spanThen With(NewRegExp) .Pattern=spanclass="code-string""/spanspanclass="code-string"[^a-zA-Z0-9]"/span .IgnoreCase=False .Global=True HTMLEncode=.Replace(data,GetRef(spanclass="code-string""/spanspanclass="code-string"HTMLEncodeReplace"/span)) EndWith EndIfEndFunction FunctionHTMLEncodeReplace(sChar,nPos,sText) HTMLEncodeReplace=spanclass="code-string""/spanspanclass="code-string"&#"/span&AscW(sChar)&spanclass="code-string""/spanspanclass="code-string";"/spanEndFunction/pre/code希望这将有助于
约翰多尔蒂
评论会员:游客 时间:2011/12/28
您好,我一般用C#和JavaScript刚刚就任的短期评价规则普遍工作:-/不知道的VBScript限制,所以感谢!我倾向于发展在VBScript中的类和测试使用。vbs文件扩展名和良好的老MsgBox命令,这样一个VBScript的版本是非常有用的。我更喜欢你的代码版本,所以更高效/像样的。此外,我从来没有使用GetRef方法,但我想它的内存指针的函数?这就是为什么我爱,你每天都学到新的东西=)张贴的感谢!约翰"简单是终极的复杂"-达芬奇www.mammothworkwear.com
Speed​​net_
评论会员:游客 时间:2011/12/28
@mcnd:这是一个真正伟大的的的回应。我一直在使用ASP的永远,但没想到以这种方式使用-无需申报作为一个变量的RegExp。非常漂亮,欣赏深思熟虑后,托德
多米尼克Pettifer:纠正我,如果我错了,但你只需要编码LT;成HTML实体引用等值,如"字符
GT;放大器
LT ;到放大器; LT
GT;到放大器; GT;
放大器;到放大器;放大器;
"到放大器;"

这正是什么Server.HtmlEncode在ASP.NET,我不知道如何在ASP经典Server.HtmlEncode是不同的

编码字符,不仅是一般对XSS攻击的安全提供了"双引号你环绕的HTML属性",而不是单引号''或没有如

LT;输入类型="文本"值="TextBox中的文字"/ GT;

而不是{ BR}
LT; INPUT TYPE ="文本"值= / GT"一些在TextBox的文本";

使用您的方法似乎将编码任何不AZ排列0 -9或空间,包括所有的标点字符,这是不必要的。 NBSP

多米尼克Pettifer

博客:www.dominicpettifer.co.uk
评论会员:约翰多尔蒂 时间:2011/12/28
您好多米尼克,
你是绝对正确的,在许多情况下,只有基本的HTML编码需要。

不过,我的情况是有点独特。我一直在给定的更新旧的传统的ASP应用程序的任务。为了保持东西干净,我决定引进一点点的OOP,并创造了一些VBScript类。
我想连载我的对象的能力,所以我创建了一个默认的toXml属性,为每个类。
正如你所期望的的,在对象的toXml属性的所有值,并返回一个良好的XML文档。允许我保存/恢复的对象,或使用XSLT生成输出。{BR​​}
我遇到的问题是,每隔一段时间,我的toXml财产将返回破损的XML。每次我尝试的过程,XML,我会得到非法字符错误。它往往不是像版权字符,或离奇的撇号是愚蠢的。

我的第一个自然反应是Server.HTMLEncode所有字符串。不过,我遇到的问题与Server.HTMLEncode引发错误,如果字符串为空,而不是空洞的。

若要继续使用Server.HTMLEncode,就意味着我将不得不通过引入XML的每一行的三个条件检查(IsNull的,是Nothing等)使我的代码搞得一团糟,我真的不喜欢杂乱的代码: - / {BR } 因此,我创建了上面的函数进行编码的任何字符,可能会打破我的XML(捕获所有)。
我现在可以相信我连载的每个对象,可以恢复没有问题=)

的问候,

约翰

"简单是终极的复杂" - 达芬奇