【发布时间】:2010-02-18 09:56:16
【问题描述】:
从我的 javascript 我尝试使用 encodeURIComponent 将数据发布到我的 asp 页面
var dd = encodeURIComponent(document.getElementById("Remarks").innerHTML);
如何使用 vbscript 在 asp 页面中解码我的 encodeURIComponent?
希望您的支持
【问题讨论】:
从我的 javascript 我尝试使用 encodeURIComponent 将数据发布到我的 asp 页面
var dd = encodeURIComponent(document.getElementById("Remarks").innerHTML);
如何使用 vbscript 在 asp 页面中解码我的 encodeURIComponent?
希望您的支持
【问题讨论】:
我想你的意思是你想解码后面的 vb.net 代码中的 URI 组件,而不是 vb 脚本。
这里的事情是您不必这样做...Request.Querystring("query_string_variable") 会自动为您完成。
如果你明确想要这样做,你可以使用
HttpUtility.UrlDecode() in .net
如果您想在 VBscript 中执行此操作,请参阅 Valerio 的答案
【讨论】:
我猜你需要这个: Classic ASP URLDecoder function using decodeURIComponent
<%
FUNCTION URLDecoder(str)
'// This function:
'// - decodes any utf-8 encoded characters into unicode characters eg. (%C3%A5 = å)
'// - replaces any plus sign separators with a space character
'//
'// IMPORTANT:
'// Your webpage must use the UTF-8 character set. Easiest method is to use this META tag:
'// <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
'//
Dim objScript
Set objScript = Server.CreateObject("ScriptControl")
objScript.Language = "JavaScript"
URLDecoder = objScript.Eval("decodeURIComponent(""" & str & """.replace(/\+/g,"" ""))")
Set objScript = NOTHING
END FUNCTION
%>
【讨论】:
当你 AJAX/Post 一个普通的“文本”变成了“不安全”的字符,所以你必须编码 URI 以在文本区域中发送一些像 cmets 这样的“文本”
var URL = "somepage.asp";
var Params = "text=Hello World!";
var ajax = getHTTPObject();
ajax.open("POST", URL, true);
ajax.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
ajax.setRequestHeader("Content-length", Params.length);
ajax.setRequestHeader("Connection", "close");
ajax.onreadystatechange = function() {
if (ajax.readyState == 4 && ajax.status == 200) {
divResponse.innerHTML = ajax.responseText; //alert(ajax.responseText);
}
}
ajax.send(Params);
结果会是这样的:
HelloWorld!
因此,为了对 URL 进行编码,您必须使用 JavaScript 方法对其进行编码
var URL = "somepage.asp";
var Params = encodeURI("text=Hello World!");
var ajax = getHTTPObject();
ajax.open("POST", URL, true);
ajax.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
ajax.setRequestHeader("Content-length", Params.length);
ajax.setRequestHeader("Connection", "close");
ajax.onreadystatechange = function() {
if (ajax.readyState == 4 && ajax.status == 200) {
divResponse.innerHTML = ajax.responseText; //alert(ajax.responseText);
}
}
ajax.send(Params);
那么结果会是这样的:
Hello World!
所以问题是如何“解码”该 URI 编码以便在 ASP Classic 服务器页面中使用它
编辑:
<%
FUNCTION URLDecode(str)
Dim objScript
Set objScript = Server.CreateObject("ScriptControl")
objScript.Language = "JavaScript"
URLDecode = objScript.Eval("decodeURIComponent(""" & str & """.replace(/\+/g,"" ""))")
Set objScript = NOTHING
END FUNCTION
%>
【讨论】:
对于我们这些解码 AJAX multipart/form-data 的人来说,普通表单处理的“内置”解码是不可用的。同样,@Diego 和@Valerio 的Server.CreateObject("ScriptControl") 解决方案虽然我确信它曾一度有效,但在现代 IIS 上会引发 500 错误。
服务器端 javascript 函数可用于经典 ASP 中的 vbscript。您只需在服务器端 javascript 脚本块中声明它们: 这是在 IIS 10/Server 2019 上运行的实际工作文件上传代码。
请记住,decodeURI/decodeURIComponent 不是灵丹妙药。根据您的具体实现,您可能需要处理引号(单引号和双引号)以及与号。此解决方案仅解决从 Classic ASP 访问 javascript。
【讨论】: