【问题标题】:Special characters and array in URLURL中的特殊字符和数组
【发布时间】:2014-02-16 20:51:29
【问题描述】:

我有学校的页面列表,并使用 CHECKBOX INPUTS 搜索过滤器。

例如,一个标准是学校所在的城市。因此,当您提交过滤器表单时,URL 如下所示: **

www.schools.com/schools/?city%5B%5D=1&city%5B%5D=2&city%5B%5D=3&city%5B%5D=4

我想让它看起来像这样。

www.schools.com/schools/**?city[]=1,2,3,4

所以基本上我需要解决两个问题:
1。如何通过具有漂亮 url 的数组传递多个同名变量?
2. URL中如何保留特殊字符(如“[”、“]”)?

我使用 Codeigniter 框架。 谢谢各位。

// 为匿名编辑
我想做这个简单的表格:

  <form action="" method="get">
  <input name="kraj[]" type="checkbox" value="1">     
  <input name="kraj[]" type="checkbox" value="2">
  <input type="submit" value="send">
  </form>

当用户检查两个输入时,将数据发送到 url,如下所示: example.com/?kraj[]=1,2
不是这样:example.com/?kraj[]=1&kraj[]=2
我知道在获得所需格式后如何处理它,但我不知道如何发送它。

【问题讨论】:

  • URL 中的特殊字符无效。这就是为什么它们首先是为您编码的。

标签: php arrays codeigniter url get


【解决方案1】:

您可以通过使用 - 分隔值来使 URL 看起来更好,因为该特殊字符不会被更改。这对我来说非常有效,除了一些 JavaScript 之外,还应该使用 $_GET 方法检查复选框:

<?php
$city_array = explode('-',$_GET['city']);
?>
<input type="checkbox" value="1" <?php if (isset($_GET['city']) && in_array('1', $city_array)) { echo 'checked="checked"'; } ?>/>
<input type="checkbox" value="2" <?php if (isset($_GET['city']) && in_array('2', $city_array)) { echo 'checked="checked"'; } ?>/>
<input type="checkbox" value="3" <?php if (isset($_GET['city']) && in_array('3', $city_array)) { echo 'checked="checked"'; } ?>/>
<input type="checkbox" value="4" <?php if (isset($_GET['city']) && in_array('4', $city_array)) { echo 'checked="checked"'; } ?>/>
<form method='GET' action='' id='form'>
<input name='city' type='hidden' value='' id='hidden'/>
</form>
<input type='submit' onclick='checkboxarray()'/>
<script>
function checkboxarray() {
var checked = [];
for (var i = 0; i < document.getElementsByTagName('input').length; i++) {
var checkbox = document.getElementsByTagName('input')[i];
if (checkbox.checked) {
checked.push(checkbox.value);
}
}
var checked = checked.toString().replace(/,/g,'-');
document.getElementById('hidden').value = checked;
document.getElementById('form').submit();
}
</script>

例如,新的 URL 可能是:www.schools.com/schools/?city=1-4

【讨论】:

  • 谢谢。我了解如何爆炸,但在提交带有复选框的表单之前我不知道如何设置它。它会自动提交,就像我写的一样。
  • 基本上表格是这样的。 &lt;label class="checkbox"&gt; &lt;input name="kraj[]" type="checkbox" value="1" &lt;?php if (isset($kraj) and in_array(1, $kraj)) { echo 'checked="checked"'; } ?&gt;&gt; Bratislavský &lt;/label&gt; &lt;label class="checkbox"&gt; &lt;input name="kraj[]" type="checkbox" value="2" &lt;?php if (isset($kraj) and in_array(2, $kraj)) { echo 'checked="checked"'; } ?&gt;&gt; Trnavský &lt;/label&gt;
  • 目前这家伙正在解决同样的问题。 stackoverflow.com/questions/20019491/… 但我想看看非javascript解决方案。
  • 你会反对使用JavaScript检查是否检查然后提交表单?
  • 我的答案已更新,以符合我认为您的要求。
猜你喜欢
  • 2010-09-21
  • 2012-08-20
  • 2015-10-21
  • 2018-06-08
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-02
相关资源
最近更新 更多