很難說沒有代碼(或者確實是一個真正的問題!),但是一般情況下,當您從文本值構建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不會觸發)。
Select-for-navigation是一種不可信任的技術。今天,您可以改爲使用簡單鏈接彈出式彈出式菜單<div>
。