server.urlencode不对特殊字符进行编码

时间:2011-10-06 18:57:57

标签: asp-classic

我有一段代码在未正确输入验证码时使用server.urlEncode (fields)重定向到页面。代码如下:

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条目适用于像Saint-Jérome这样的城市,则无法对重音进行编码。浏览器栏中的网址如下所示: ?page.asp行动= VCERR [...]&安培; CY = SAINT-杰罗姆&安培; OD = 10%2F05%2 [...]

然后使用QueryString("cy)拉出文本并显示在页面上,导致字符无法正确显示。

这里有什么我想念的吗?我不确定为什么server.urlEncode不起作用。

编辑:

我在调试时检查了变量sRedirectTo,似乎urlEncode对字符起作用,因此切换发生在Response.redirectQueryString之间。重定向是否可能删除了特殊字符的编码?另外奇怪的是,对其他变量进行的urlencoding保持不变。

1 个答案:

答案 0 :(得分: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