Удалить %5B%5D из URL-адреса при отправке формы
когда я отправляю форму с несколькими флажками с одинаковым именем, я получаю URL-адрес, который выглядит примерно так: www.mysite.com/search.php?myvalue%5B%5D=value1&myvalue%5B%5D=value2
есть ли что-нибудь, что я могу удалить %5Б%5Д, чтобы сделать URL-адрес "красивая", что-то вроде откройте файл. htaccess?
код:
<form>
<input type="checkbox" name="myvalue[]" value="value1">
<input type="checkbox" name="myvalue[]" value="value2">
</form>
2 ответов
есть ли что-нибудь, что я могу удалить %5Б%5Д, чтобы сделать URL-адрес "красивая", что-то вроде откройте файл. htaccess?
нет. The []
are зарезервированные символы в URL-адресах, поэтому они определенно должны быть 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.
}
таким образом, вы можете просто продолжать использовать имя braceless.
<form>
<input type="checkbox" name="option" value="option1" />
<input type="checkbox" name="option" value="option2" />
</form>
[
и ]
являются зарезервированными символами в URL-адресе, поэтому браузер должен их кодировать, чтобы URL-адрес работал правильно. Эти символы не могут содержаться в URL-адресе. Также у вас не может быть других зарезервированных символов, таких как пробелы, амперсанды и т. д. Все они будут автоматически перекодированы для вас (во многих случаях, даже если вы вводите URL-адрес в браузере вручную).
Если вам нужен "довольно URL" вы можете:
не использовать форму вообще; предоставить ссылка на известный" симпатичный " URL.
примите уродливый URL, но немедленно перенаправьте его на довольно URL в пункте 1 выше.
избегайте использования угловых скобок в именах полей (но это также будет означать много изменений в вашем коде)
использовать
POST
метод в форме, так что данные поля вообще не отображаются на URL-адресе (но это означало бы, что у вас нет ссылки, которую пользователь может закладка.)
если вы должны "приукрасить" этот URL, мое предложение будет вариантом 2 выше.
честно говоря, я бы не беспокоился об этом. Люди получают waaaay, чтобы подчеркнуть "красивые" URL-адреса. Я действительно не понимаю, почему.
- очень немногие люди, которых я знаю, когда-либо вводили URL-адрес длиннее, чем просто доменное имя.
- если вы беспокоитесь о SEO для этого, не -- поисковые боты знают, что такое кодировка ULR, и могут смотреть мимо он.
- единственная другая причина для того, чтобы "красивый" URL-адрес, чтобы он выглядел хорошо, если пользователи делятся им по электронной почте или что-то еще. Честно говоря, если вы беспокоитесь о привлекательности URL для этого, и в нем есть поля формы, то он уже слишком уродлив, только с
&
и=
знаки повсюду. Закодированные скобки действительно не делают его хуже.
поэтому мой честный ответ: не потейте. Это нормально; игнорируйте это; продолжайте важные части веб-разработки.