1

我想要一个使用 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. 该解决方案是否可以跨浏览器工作?
4

1 回答 1

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,它应该可以正常工作(或者至少在我上面的测试示例中是这样)!

于 2012-09-17T12:06:30.470 回答