【问题标题】:Alternative to sending comma separated parameter by querystring通过查询字符串发送逗号分隔参数的替代方法
【发布时间】:2012-01-11 15:51:43
【问题描述】:

我正在尝试发送如下查询字符串参数,但我认为在查询字符串中使用逗号无效,那么有什么更好的替代路径参数的逗号分隔符?

<a href="/?path=1,2,3"></a>

我不想像&lt;a href="/?path=1&amp;path=2&amp;path=3"&gt;&lt;/a&gt; 这样发送很长的邮件。

【问题讨论】:

    标签: url query-string web


    【解决方案1】:

    你可以使用%2C,这是,的url编码值。

    【讨论】:

    • Allready ASP.NET MVC Framework 转换为 url 编码值,但我觉得它不是 seo 友好或不是更好的方法。这就是我不想使用的原因。 url 编码值有什么缺点吗?
    • HTTP 协议负责对 url 进行解码,因此在您的程序中,参数 p 将是 1,2,3,但是,用户会在他们的浏览器中看到编码的 url,您现在可能会看到想要,所以我猜你可以使用- 作为分隔符,因为它不需要蜜蜂编码。
    • 我不明白为什么它对 SEO 不友好。无论如何它都在查询字符串中。
    【解决方案2】:

    逗号是允许的,也可以是未编码的形式,因为它是一个保留字符。

    查看此 RFC 部分:RFC 3986 - 2.2. Reserved Characters

    据我了解,这仅取决于您的服务器如何处理包含逗号的 URL。试一试就知道了。

    【讨论】:

      【解决方案3】:

      您可以使用转义的(如果我们是迂腐的,则使用百分比编码的)值 ',',或根据 RFC 3986 (- _ . ~) 的未保留字符。

      【讨论】:

        【解决方案4】:

        你可以简单的发送,我使用lodash收集选择产品id

         vm.saleStartDate = vm.saleDateRange.startDate.toISOString();
         vm.saleEndDate = vm.saleDateRange.endDate.toISOString();
        
         vm.productIds = _.map(vm.selectedProducts, 'id').join(',');
        
         vm.iFrameURL = host + '/Reports/MonthWiseAvgSalesViewer.aspx?id=MonthWiseAvgSalesReport.rdlc&salesSD=' + vm.saleStartDate + '&salesED=' + vm.saleEndDate +
                       '&prIds=' + vm.productIds
        

        【讨论】:

          【解决方案5】:

          如果要发送整数,请使用空格作为分隔符。

          【讨论】:

            【解决方案6】:

            你可以使用管道“|”作为分隔符,但您将不得不在服务器端处理它。不过不确定这是否值得。

            【讨论】:

            • 根据官方规范,管道在 URL 中根本无效。
            • 谢谢.. 不知道。
            猜你喜欢
            • 1970-01-01
            • 2016-10-01
            • 1970-01-01
            • 2012-03-23
            • 1970-01-01
            • 2014-11-07
            • 2019-10-29
            • 1970-01-01
            • 2011-10-25
            相关资源
            最近更新 更多