2011-10-06 91 views
1

当验证码输入错误时,我有一段代码重定向到使用server.urlEncode (fields)的页面。代码如下所示:server.urlencode不编码特殊字符

sRedirectTo = "page.asp" _ 
& "?action=vcerr" _ 
& "&at=" & server.urlEncode(sAdType) _ 
& "&fn=" & server.urlEncode(sFirstname) _ 
& "&mn=" & server.urlEncode(sMiddleName) _ 
& "&ln=" & server.urlEncode(sLastName) _ 
& "&sx=" & server.urlEncode(sSex) _ 
& "&pr=" & server.urlEncode(sProvince) _ 
& "&cn=" & server.urlEncode(sCountry) _ 
& "&cy=" & server.urlEncode(sCity) _ 
& "&md=" & server.urlEncode(dMomentDate) _ 
& "&ag=" & server.urlEncode(iAgree) _ 
& "&chn=" & server.urlEncode(sCharityName) _ 
& "&chu=" & server.urlEncode(sCharityUrl) _ 
& "&city=" & server.urlEncode(sCityID) _ 
& "&key=" & server.urlEncode(sKeywords) 

然而,当cy项是像圣徒杰罗姆一个城市,它没有编码的口音。网址在浏览器栏是这样的:? page.asp行动= VCERR [...] & CY = SAINT-杰罗姆& OD = 10%使用2F05%2 [...]

然后将文本拉QueryString("cy)并显示在页面上,导致字符不能正确显示。

有什么我在这里失踪?我不确定为什么server.urlEncode不起作用。

编辑:

我查了可变sRedirectTo在调试时,似乎urlEncode确实对人物的工作,所以Response.redirectQueryString之间的切换情况。重定向是否可以删除特殊字符的编码?另外奇怪的是,在其他变量上完成的urlencoding保持不变。

回答

1

确保您已将CodePageCharset设置为UTF-8,并将这两个文件都保存在UTF-8中。

测试脚本我用:

r.asp

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> 
<% 
Response.Charset = "UTF-8" 

cy = "SAINT-JÉRÔME" 
Response.Redirect("p.asp?cy=" & cy) 
%> 

p.asp

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> 
<% 
Response.Charset = "UTF-8" 

cy = Request.QueryString("cy") 

Response.Write cy 
%> 

输出:

SAINT-JÉRÔME 
+0

如果不是包含“SAINT-JÉRÔME”,而是将cy变量赋值为“Hello&oops = World”,会发生什么? – AnthonyWJones

+0

@AnthonyWJones:由于我的示例脚本不使用'Server.URLEncode',输出将是“Hello”。 – stealthyninja