2012-09-17 17 views
1

我想用笨的URL是這樣的:如何使用笨,使用Javascript強制逗號的URL和GET形式

example?type=1,2,3,4 

我可以手動輸入此命令,並導航到URL這樣,系統行得通。然而,我有一個使用GET的表單,我想發佈多個值的類型。我正在使用Javascript來加入輸入。

<form action="example" method="GET" id="type-form"> 
    <select multiple="multiple" name="_type[]" id="type-array-id-1"> 
     <option value="1">Type 1</option> 
     <option value="2">Type 2</option> 
     <option value="3">Type 3</option> 
     <option value="4">Type 4</option> 
     <option value="5">Type 5</option> 
    </select> 
    <input type="hidden" name="type" id="type-comma-sep"/> 
    <input type="submit" value="Get" /> 
</form> 
<script> 
    $("#type-form").bind("submit",function(){ 
     var type_array = $("#type-array-id-1").val().join(","); 
     $("#type-array-id-1").val(""); 
     $("#type-comma-sep").val(type_array); 
    }); 
</script> 

我用一些其他的SO問題的答案,讓我這麼遠,但是當我提交表單,我得到:

example?type=1%2C2%2C3%2C4 

我的後端依賴「」存在於網址。那麼我怎麼能強制逗號進入URL?

我也試着重寫htaccess的(雖然甚至不知道這是正確的):

RewriteCond %{REQUEST_URI} ^([^\%2C]*)\%2C(.*)$ 
RewriteRule .* %1,%2 [R=301,L] 

而且我嘗試使用encodeURIComponent方法(type_array)與encodeURI(type_array),但它從未作出了區別。

,是我在笨設置如下:

$config['permitted_uri_chars'] = 'a-z 0-9~%.,:_\-'; 

和系統/庫中/ input.php

if (! preg_match('/^[a-z0-9,:_\/-]+$/i', $str)) 

所以......

  1. 我怎麼能強迫URL中的逗號(Javascript更可取)?
  2. 該解決方案是否可以跨瀏覽器工作?
+0

你的後端絕對不得不依賴逗號存在嗎?你不能直接使用'$ _GET'數組嗎?或者你能解碼'$ _GET ['type']'的值嗎? – froddd

+0

不,它不需要,因爲我可以改變它,但我的理解是從一個常見的/良好的做法URL設計,然後type = 1,2,3更好 – gelviis

+0

@GregorMcKelvie我從來沒有聽說過。我會建議使用GET數組,而不是'爆炸'一個字符串。 –

回答

0

如果你通過Javascript重定向,那麼它應該是OK!

$("#type-form").bind("submit",function(){ 
    var type_array = $("#type-array-id-1").val().join(","); 

    window.location = '?type='+type_array; 

    return false; 
}); 

如果您讓表單正常提交,它將URL編碼所有查詢字符串參數,轉換您的逗號。

如果你只是用逗號明確地設置了URL,它應該可以正常工作(或者至少在我上面的測試示例中)。

+0

非常感謝! – gelviis

+0

沒問題!請記住,您必須手動添加您在表單中可能具有的任何其他輸入字段數據(如果您的表單由此更改) – manavo