【问题标题】:How to force comma in URL using Codeigniter, Javascript and GET form如何使用 Codeigniter、Javascript 和 GET 表单在 URL 中强制使用逗号
【发布时间】:2012-09-17 10:55:45
【问题描述】:

我想要一个使用 Codeigniter 的 URL,如下所示:

example?type=1,2,3,4

我可以手动输入这个,也可以导航到这样的 URL,系统工作正常。但是,我有一个使用 GET 的表单,我想在其中发布多个类型的值。我正在使用 Javascript 来加入输入。

<form action="example" method="GET" id="type-form">
    <select multiple="multiple" name="_type[]" id="type-array-id-1">
        <option value="1">Type 1</option>
        <option value="2">Type 2</option>
        <option value="3">Type 3</option>
        <option value="4">Type 4</option>
        <option value="5">Type 5</option>
    </select>
    <input type="hidden" name="type" id="type-comma-sep"/>
    <input type="submit" value="Get" />
</form>
<script>
    $("#type-form").bind("submit",function(){
        var type_array = $("#type-array-id-1").val().join(",");
        $("#type-array-id-1").val("");
        $("#type-comma-sep").val(type_array);
    });
</script>

我已经使用了一些其他 SO 问题的答案来让我走到这一步,但是当我提交我得到的表单时:

example?type=1%2C2%2C3%2C4

我的后端依赖于 URL 中的“,”。那么如何强制逗号进入 URL 呢?

我也尝试过 htaccess 重写(虽然不确定这是否正确):

RewriteCond %{REQUEST_URI} ^([^\%2C]*)\%2C(.*)$
RewriteRule .* %1,%2 [R=301,L]

我尝试使用 encodeURIComponent(type_array) 和 encodeURI(type_array),但没有任何作用。

另外我在 Codeigniter 中的设置如下:

$config['permitted_uri_chars'] = 'a-z 0-9~%.,:_\-';

在 system/libraries/input.php 中

if ( ! preg_match('/^[a-z0-9,:_\/-]+$/i', $str))

所以...

  1. 如何在 URL 中强制使用逗号(最好使用 JavaScript)?
  2. 该解决方案能否跨浏览器工作?

【问题讨论】:

  • 您的后端是否必须完全依赖逗号的存在?不能直接使用$_GET数组吗?或者你能解码$_GET['type']的值吗?
  • 不,我可以更改它,但我的理解来自一个常见/良好实践的 URL 设计,然后 type=1,2,3 更好
  • @GregorMcKelvie 我从来没有听说过。我建议使用 GET 数组而不是 explodeing 字符串。
  • 更好的做法是使用 CodeIgniter 的 URL 方案并避免在 URL 中使用查询字符串:codeigniter.com/user_guide/general/urls.html
  • @froddd Yeh 但我可能有多达 10 种“类型”type=1,2,3,4 等以及影响结果的其他动态变量(因为我使用 URL过滤结果)。所以 CI 的 URL 方案不适合这个(IMO)。

标签: javascript codeigniter url get


【解决方案1】:

如果您通过 Javascript 进行重定向,那么应该没问题!

$("#type-form").bind("submit",function(){
    var type_array = $("#type-array-id-1").val().join(",");

    window.location = '?type='+type_array;

    return false;
});

如果您让表单正常提交,它将对所有查询字符串参数进行 URL 编码,转换您的逗号。

如果您只是用逗号明确设置 URL,它应该可以正常工作(或者至少在我上面的测试示例中是这样)!

【讨论】:

  • 没问题!请记住,您还必须手动添加表单中可能包含的任何其他输入字段数据(如果您的表单从此更改)
猜你喜欢
  • 1970-01-01
  • 2013-07-09
  • 2020-08-24
  • 1970-01-01
  • 2012-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-21
相关资源
最近更新 更多