Удалите% 5B% 5D из URL при отправке формы

Когда я отправляю форму с несколькими флажками с таким же именем, я получаю 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> 

Есть ли что-то, что я могу удалить% 5B% 5D, чтобы сделать URL «симпатичным», с чем-то вроде htaccess?

Нет. [] Являются зарезервированными символами в URL-адресах, поэтому они обязательно должны быть закодированы в 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. } 

Таким образом, вы можете просто использовать бесцельное имя.

 <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-адресов для этого, и в нем есть поля формы, то это уже слишком уродливо, а только знаки & и = повсюду. Закодированные скобки действительно не ухудшают ситуацию.

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