当我提交一个包含多个具有相同名称的复选框的表单时,我会得到一个如下所示的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>
答案 0 :(得分:14)
我是否可以删除%5B%5D以使网址“漂亮”,例如htaccess?
没有。网址中的[]
为reserved characters,因此它们必须为URL-encoded。
如果使用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.
}
这样你就可以继续使用无括号名称了。
<form>
<input type="checkbox" name="option" value="option1" />
<input type="checkbox" name="option" value="option2" />
</form>
答案 1 :(得分:2)
[
和]
是网址中的保留字符,因此浏览器必须对其进行编码才能使网址正常工作。您不能在URL中包含这些字符。你也没有任何其他保留字符,如空格,符号等。它们都会自动为你编码(在很多情况下,即使你手动将URL输入浏览器)。
如果您需要“漂亮的网址”,您可以:
根本不使用表格;提供指向已知“漂亮”网址的链接。
接受丑陋的网址,但会立即将其重定向到上面第1点中的漂亮网址。
避免在字段名称中使用尖括号(但这也意味着对后端代码进行了大量更改)
在表单上使用POST
方法,以便字段数据根本不显示在URL上(但这意味着您没有用户可以添加书签的链接)
如果您必须“美化”此网址,我的建议将是上面的选项2.
但坦率地说,我不担心。人们不禁要强调“漂亮”的网址。我真的不明白为什么。&
和=
标志遍布整个地方。编码的括号确实不会让它变得更糟。所以我诚实的回答是:不要出汗。这是正常的;忽略它;继续进行Web开发工作的更重要部分。
答案 2 :(得分:0)
如果这对您来说真的是一个问题,那么如何使用某种分隔符(如 ,
(或任何您想要的))将所有内容“合并”为一个参数。
因此,您最终会得到像 myvalue%5B%5D=value1&myvalue%5B%5D=value2
这样的 URI,而不是像 myvalue=value1,value2
这样的 URI。
这只是一个想法,现在没有代码,但你需要用 JS 来做,并在你的后端解析 param 值(为了有一个数组)。