提交表单时从URL中移除%5B%5D(Remove [] from URL when submitt

2019-07-17 20:32发布

当我提交与有我得到一个看起来像这样的URL多​​个同名复选框的表单:www.mysite.com/search.php?myvalue%5B%5D=value1&myvalue%5B%5D=value2

有什么方法,我可以删除%5B%5D使URL“漂亮”,喜欢的东西htaccess的?

码:

<form>
     <input type="checkbox" name="myvalue[]" value="value1">
     <input type="checkbox" name="myvalue[]" value="value2">
</form>

Answer 1:

有什么方法,我可以删除%5B%5D使URL“漂亮”,喜欢的东西htaccess的?

号的[]被保留字符在网址,因此他们绝对需要是URL编码 。

如果使用POST是不是一种选择,这是有道理的因为它是一个搜索表单,你最好的办法是只给他们以1左右的值每一个不同的名字。

<form>
    <input type="checkbox" name="option1" value="1" />
    <input type="checkbox" name="option2" value="1" />
</form>

或者,如果你真的坚持在具有相同名称的他们,那么你就应该自己提取查询字符串,而不是依赖于获得了一个参数时,返回一个数组的PHP特定功能[]的后缀名。

$params = explode('&', $_SERVER['QUERY_STRING']);

foreach ($params as $param) {
    $name_value = explode('=', $param);
    $name = $name_value[0];
    $value = $name_value[1];
    // ... Collect them yourself.
}

这样,你可以继续使用braceless名。

<form>
    <input type="checkbox" name="option" value="option1" />
    <input type="checkbox" name="option" value="option2" />
</form>


Answer 2:

[]在一个URL保留字符,所以浏览器必须进行编码,以便他们的网址,以正常工作。 你不能在URL中这些字符。 你也不能有任何其他保留字符,如空格,与符号等,他们都将自动为您编码(在很多情况下,即使你手动输入网址到浏览器)。

如果你需要一个“漂亮网址”,您可以:

  1. 不使用的一种形式,在所有; 提供一个链接到一个已知的“漂亮”的网址。

  2. 接受丑陋的URL,但立即重定向它漂亮的URL在上述第1点。

  3. 避免使用尖括号都在你的字段名(不过这将意味着很多改变你的后端代码的太)

  4. 使用POST的形式方法,使现场数据不会对所有的URL显示出来(不过这将意味着你没有一个链接,用户可以收藏)。

如果你必须“美化”这个URL,我的建议是上面的选项2。

坦率地说,不过,我不会担心。 人们得到waaaay以强调有关“漂亮”的网址。 我真的不知道为什么。

  • 很少有人知道我其实过键入一个URL不仅仅是一个域名更长。
  • 如果你担心SEO这个,不要 - 搜索引擎机器人知道ULR编码是什么,可以看看过去吧。
  • 唯一的其他原因想要一个“漂亮”的网址是这样,它看起来很不错,如果用户通过电子邮件链接或东西分享。 说实话,如果你担心URL prettyness为和它有表单字段中它,然后它已经太丑陋了,只用&=迹象所有的地方。 编码括号真的不把事情弄得更糟。

所以我诚实的答案是:不出汗。 这是正常的; 忽略它; 得到与您的网站开发工作的重要部分。



文章来源: Remove %5B%5D from URL when submitting form