评论会员:约翰多尔蒂: 时间:2011/12/28
。马克纤毛Vincenti
评论会员:游客 时间:2011/12/28
通过不使用AscW会,你是不正确编码的Unicode字符。?例如,正确的编码字符"…,而不是放大器;#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
Speednet_
评论会员:游客 时间: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(捕获所有)。
我现在可以相信我连载的每个对象,可以恢复没有问题=)
的问候,
约翰
"简单是终极的复杂" - 达芬奇