Удалить %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" вы можете:

  1. не использовать форму вообще; предоставить ссылка на известный" симпатичный " URL.

  2. примите уродливый URL, но немедленно перенаправьте его на довольно URL в пункте 1 выше.

  3. избегайте использования угловых скобок в именах полей (но это также будет означать много изменений в вашем коде)

  4. использовать POST метод в форме, так что данные поля вообще не отображаются на URL-адресе (но это означало бы, что у вас нет ссылки, которую пользователь может закладка.)

если вы должны "приукрасить" этот URL, мое предложение будет вариантом 2 выше.

честно говоря, я бы не беспокоился об этом. Люди получают waaaay, чтобы подчеркнуть "красивые" URL-адреса. Я действительно не понимаю, почему.

  • очень немногие люди, которых я знаю, когда-либо вводили URL-адрес длиннее, чем просто доменное имя.
  • если вы беспокоитесь о SEO для этого, не -- поисковые боты знают, что такое кодировка ULR, и могут смотреть мимо он.
  • единственная другая причина для того, чтобы "красивый" URL-адрес, чтобы он выглядел хорошо, если пользователи делятся им по электронной почте или что-то еще. Честно говоря, если вы беспокоитесь о привлекательности URL для этого, и в нем есть поля формы, то он уже слишком уродлив, только с & и = знаки повсюду. Закодированные скобки действительно не делают его хуже.

поэтому мой честный ответ: не потейте. Это нормально; игнорируйте это; продолжайте важные части веб-разработки.