【发布时间】: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))
所以...
- 如何在 URL 中强制使用逗号(最好使用 JavaScript)?
- 该解决方案能否跨浏览器工作?
【问题讨论】:
-
您的后端是否必须完全依赖逗号的存在?不能直接使用
$_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