【问题标题】:how to use decodeURIComponent in asp?如何在 asp 中使用 decodeURIComponent?
【发布时间】:2010-02-18 09:56:16
【问题描述】:

从我的 javascript 我尝试使用 encodeURIComponent 将数据发布到我的 asp 页面

var dd = encodeURIComponent(document.getElementById("Remarks").innerHTML);

如何使用 vbscript 在 asp 页面中解码我的 encodeURIComponent?

希望您的支持

【问题讨论】:

    标签: javascript asp-classic


    【解决方案1】:

    我想你的意思是你想解码后面的 vb.net 代码中的 URI 组件,而不是 vb 脚本。

    这里的事情是您不必这样做...Request.Querystring("query_string_variable") 会自动为您完成。

    如果你明确想要这样做,你可以使用

    HttpUtility.UrlDecode() in .net

    如果您想在 VBscript 中执行此操作,请参阅 Valerio 的答案

    【讨论】:

      【解决方案2】:

      我猜你需要这个: 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
      %>
      

      【讨论】:

        【解决方案3】:

        当你 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
        %>
        

        【讨论】:

          【解决方案4】:

          对于我们这些解码 AJAX multipart/form-data 的人来说,普通表单处理的“内置”解码是不可用的。同样,@Diego 和@Valerio 的Server.CreateObject("ScriptControl") 解决方案虽然我确信它曾一度有效,但在现代 IIS 上会引发 500 错误。

          服务器端 javascript 函数可用于经典 ASP 中的 vbscript。您只需在服务器端 javascript 脚本块中声明它们: 这是在 IIS 10/Server 2019 上运行的实际工作文件上传代码。

          请记住,decodeURI/decodeURIComponent 不是灵丹妙药。根据您的具体实现,您可能需要处理引号(单引号和双引号)以及与号。此解决方案仅解决从 Classic ASP 访问 javascript。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-08-21
            • 1970-01-01
            • 2016-03-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多