Сложно сказать без кода (или действительно с вопросом!), Но в целом, когда вы создаете URL из текстового значения, вы должны вызывать encodeURIComponent на стороне клиента, а не пытаться кодировать его на стороне сервера , например.
<select id="foo">
<option value="123./">123./</option>
<option value="456./">456./</option>
</select>
<script type="text/javascript">
document.getElementById('foo').onchange= function() {
var v= this.value;
location.href= 'http://www.example.com/thing?foo='+encodeURIComponent(v);
};
</script>
Тем не менее, ни .
, ни /
не являются специальными символами в параметрах запроса, поэтому забывание кодировать их в этом случае фактически не вызовет проблемы. Если мы говорим о части пути URL, то /
является особенным и должно быть закодировано:
location.href= 'http://www.example.com/things/'+encodeURIComponent(v)+'/view';
http://www.example.com/things/123.%2F/view
Однако включение% 2F в пути имеет тенденцию вызывать проблемы как в Apache, так и в IIS по различным неясным и раздражающим причинам; лучше избегать.
В любом случае, выбор тегов, которые перенаправляют страницу, являются плохой новостью и не должны использоваться. Помимо необходимости работы JS вообще, они неудобны (нет открытой вкладки, закладки, ссылки и т. Д.), Они нарушают навигацию с помощью клавиатуры (потому что onchange запускается сразу, делая невозможным выбор другой опции), и они ломают кнопку возврата (потому что когда вы возвращаетесь на страницу, значения формы запоминаются, поэтому вы не можете снова перейти на ту же страницу вперед, так как onchange не сработает).
Выбор для навигации является дискредитированной техникой. Сегодня вы можете вместо этого попробовать всплывающее при нажатии <div>
, полное простых ссылок.