Asp classic 将用户输入限制为IBM System i 00280代码页中的字符

Asp classic 将用户输入限制为IBM System i 00280代码页中的字符,asp-classic,ibm-midrange,codepages,Asp Classic,Ibm Midrange,Codepages,我们需要将经典ASP网站中的用户输入限制为IBMSystemi允许的字符 除了使用(JavaScript | VBScript)函数根据允许的字符字符串检查输入字符串的每个字符外,还有没有其他方法可以正常执行 我想到的一个基本的经典ASP函数: 功能检查输入(文本,替换) Dim output:output=“” Dim haystack:haystack=“abcd..”在此处插入允许的字符。 尺寸i:i=0 对于i=1到Len(文本) 暗针:针=中(文本,i,1) 如果仪表(干草堆、针)=0

我们需要将经典ASP网站中的用户输入限制为IBMSystemi允许的字符

除了使用(JavaScript | VBScript)函数根据允许的字符字符串检查输入字符串的每个字符外,还有没有其他方法可以正常执行

我想到的一个基本的经典ASP函数:

功能检查输入(文本,替换)
Dim output:output=“”
Dim haystack:haystack=“abcd..”在此处插入允许的字符。
尺寸i:i=0
对于i=1到Len(文本)
暗针:针=中(文本,i,1)
如果仪表(干草堆、针)=0,则
针=更换
如果结束
输出=输出和指针
下一个
检查输入=输出
端函数

在我的函数中,一个RegExp会是一个过火的问题吗?

第一个问题的简短答案是:不会。对于第二个问题:RegEx在这里可能没有帮助,因为不是浏览器中的所有RegEx实现都支持您需要测试的字符,而且RegEx的VBScript版本也不支持

即使使用您提议的代码方法,也需要一些非常仔细的思考。为了能够将您想要支持的字符集作为字符串文本放入ASP文件中,您保存的代码页需要包含所有需要的字符,或者您需要使用
AscW
来帮助您构建包含这些字符的字符串


一种稍微简单的方法是使用Javascript,并将页面字符集和代码页设置为UTF-8。这将允许您创建包含任何字符集的字符串文字。

,因为通常不依赖于浏览器验证而被认为是安全的,所以您应该考虑更改IBM I(以前的OS/ 400)应用程序接口以接受UCS-2数据,并在服务器端执行任何必要的验证和转换。

请告诉我,你不是建议他只依赖浏览器验证。我有点知道这一点,太糟糕了。关于页面的代码页,我们已经在使用UTF-8,所以我们已经讨论过了。@X-Zero:我提供了选择,最终由开发人员决定是否需要额外的皮带和支架服务器端验证。告诉我服务器端验证是否是所有应用程序的绝对要求,而不管它们的用途、部署和/或可用的开发资源如何?@AnthonyWJones-在一些严格控制的部署环境(比如thinclients)下可能不是。然而,OP将其列为(假定面向公众的)网站的一部分——在这种情况下,输入永远不应该被信任。在没有明确的限制理由的情况下,最好谨慎行事,让服务器验证有效输入。@X-Zero:原则上我同意,但“更好”是另一个价值判断,由开发人员调用。开发这种服务器端代码并非没有成本。是什么原因导致您需要限制字符?@WarrenT:我们需要将数据传递到AS400系统,如果用户输入的字符不在该代码页中,该过程就会中断。我们可以在传递数据之前删除无效字符,但这将是一个糟糕的解决方案,因为用户不知道正在进行的更改。这不是一个可行的解决方案,它将对我们的系统产生巨大影响。此外,我们很难简单地从EDP部门获取有关正在使用的代码页的信息,让他们在任何不现实的地方更改代码页。如果不现实,则该应用程序不应提供给公众访问。首先,没有理由让流程“爆炸”。流程应该简单地记录无效数据,或者拒绝事务,或者记录事务以供审查。如果不这样做,就需要新的开发人员,或者当前的开发人员需要培训。其次,不能在不控制的系统上强制使用角色集。无法确保远程系统甚至可以使用相同的字符集。