使用javascript在包含特殊字符的URL中传递参数[重复]

Posted

技术标签:

【中文标题】使用javascript在包含特殊字符的URL中传递参数[重复]【英文标题】:Passing Parameters in URL containing special characters using javascript [duplicate] 【发布时间】:2015-12-17 20:51:54 【问题描述】:

您好,我正在尝试在包含参数的控制器中调用操作结果,但是每当这些参数之一包含 # 符号(特殊字符)时,字符串参数不包括参数中的 #sing 并且接下来所有参数都设置为 null。

以下是我的 java 脚本,我通过它调用我的操作结果。

    <script type="text/javascript">
        $(document).ready(function () 
            $('#btnExport').unbind().click(function () 
                var url = @Url.Content("~/BankStatement/ExportBankStatementSummary") +
                    "?legalName=" + '@ViewBag.LegalName' +
                    "&dba=" + '@ViewBag.DBA' + 
                    "&contactPerson=" + '@ViewBag.ContactPerson' +
                    "&address=" + '@ViewBag.Address' + 
                    "&period=" + '@ViewBag.Period' +
                    "&totalHeading=" + '@ViewBag.TotalHeading';
                window.location = url;
            );
        );
    </script>

这是在这个 java 脚本中调用的动作结果

public ActionResult ExportBankStatementSummary(string legalName, string dba, 
                                               string contactPerson, string address, 
                                               string period, string totalHeading)
    
        ViewBag.LegalName = legalName;
        ViewBag.DBA = dba;
        ViewBag.ContactPerson = contactPerson;
        ViewBag.Address = address;
        ViewBag.Period = period;
        ViewBag.TotalHeading = totalHeading;

        ...

问题在于,在动作结果参数中,当任何参数包含任何特殊字符(在本例中为#)时,该参数和下一个参数将变为空。

例如,如果地址为“Street # 2”,则参数地址为“Street”,下一个参数 period 和 totalHeading 为空。

我们将不胜感激。

提前致谢。

[我不同意这个问题的重复,因为标记的重复问题被详细讨论过,详细的对话涵盖了这个问题的答案,但实际问题与这个问题完全不同。]

【问题讨论】:

# 是一个片段标识符。片段和它之后的任何东西都不会被发送到服务器。您需要确保将其替换为另一个字符。 但是你为什么要这样构建你的网址——而不是@Url.Action("ExportBankStatementSummary", "BankStatement", new legalName = ViewBag.LegalName, dba = ViewBag.DBA, .... ) 如何将包含特殊字符的数据替换为其他字符请指导 是的,我可以这样做,但这样做有什么好处? 查看 Satpal 的答案以获取一个选项。使用@Url.Action() 的原因是它总是会生成正确的 url 并在内部根据你的路由定义进行验证(并且它的代码更少,更易于阅读) 【参考方案1】:

你需要encodeURIComponent()

encodeURIComponent() 方法通过将特定字符的每个实例替换为表示字符的 UTF-8 编码的一个、两个、三个或四个转义序列来对统一资源标识符 (URI) 组件进行编码(将只有四个转义由两个“代理”字符组成的字符序列)。

例子

 var url = @Url.Content("~/BankStatement/ExportBankStatementSummary") +
                "?legalName=" + encodeURIComponent('@ViewBag.LegalName')

【讨论】:

谢谢,你没看错!!!非常感谢你。

以上是关于使用javascript在包含特殊字符的URL中传递参数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在JavaScript编码URL不编码&

JavaScript中url 传递参数(特殊字符)解决方法

URL中的特殊字符

如何在 JavaScript 中检查字符串是不是包含数字和特殊字符?

java - 如何查找包含特殊字符或空格的url是不是存在于java中

htmljavascripturl特殊字符的转义诠释及使用方法详解